Matias Araya Asked: 2024-09-24 03:15:29 +0800 CST2024-09-24 03:15:29 +0800 CST 2024-09-24 03:15:29 +0800 CST 如何从末尾到开头剪切范围? 772 我需要在 AIX 中更改字符串的顺序,但使用命令cut我无法做到这一点 前任: echo FT0215202301.xml | cut -b 7-10,5-6,3-4 结果: 02152023 预期的: 20230215 unix 3 个回答 Voted Best Answer markp-fuso 2024-09-24T03:27:32+08:002024-09-24T03:27:32+08:00 awk使用or 的几个想法sed: $ echo FT0215202301.xml | awk '{print substr($1,7,4) substr($1,3,4)}' 20230215 $ echo FT0215202301.xml | sed -E 's/^..(....)(....).*/\2\1/' 20230215 相同的解决方案,但是使用此处的字符串来消除子 shell: $ awk '{print substr($1,7,4) substr($1,3,4)}' <<< 'FT0215202301.xml' 20230215 $ sed -E 's/^..(....)(....).*/\2\1/' <<< 'FT0215202301.xml' 20230215 如果文件名存储在变量中,那么您可以使用bash's子字符串功能( )并消除对其他二进制文件(例如,)${var:start:length}的需要,例如:awksed $ fname=FT0215202301.xml $ echo "${fname:6:4}${fname:2:4}" 20230215 注意: bash字符串索引从位置 0 开始 虽然上述解决方案生成了 OP 的预期输出20230215,但 OPcut -b 7-10,5-6,3-4似乎表明 OP 可能想要20231502作为预期输出。如果是这种情况,修改后的命令将是: $ awk '{print substr($1,7,4) substr($1,5,2) substr($1,3,2)}' <<< 'FT0215202301.xml' 20231502 $ sed -E 's/^..(..)(..)(....).*/\3\2\1/' <<< 'FT0215202301.xml' 20231502 $ fname=FT0215202301.xml $ echo "${fname:6:4}${fname:4:2}${fname:2:2}" 20231502 pmf 2024-09-24T03:23:49+08:002024-09-24T03:23:49+08:00 我会使用 Bash 的子字符串扩展: f=FT0215202301.xml; echo "${f:6:4}${f:2:2}${f:4:2}" 20230215 RavinderSingh13 2024-09-24T11:17:01+08:002024-09-24T11:17:01+08:00 借助 GNUawk match函数及其将捕获组用于数组的功能,可以尝试以下代码。使用正则表达式^.{2}(.{4})(.{4}).{2}\.xml$创建 2 个捕获组并将值保存到名为 的数组中arr,我们将使用该数组根据需要打印值。 echo FT0215202301.xml | awk ' match($0,/^.{2}(.{4})(.{4}).{2}\.xml$/,arr){ print arr[2] arr[1] } '
awk
使用or 的几个想法sed
:相同的解决方案,但是使用此处的字符串来消除子 shell:
如果文件名存储在变量中,那么您可以使用
bash's
子字符串功能( )并消除对其他二进制文件(例如,)${var:start:length}
的需要,例如:awk
sed
注意:
bash
字符串索引从位置 0 开始虽然上述解决方案生成了 OP 的预期输出
20230215
,但 OPcut -b 7-10,5-6,3-4
似乎表明 OP 可能想要20231502
作为预期输出。如果是这种情况,修改后的命令将是:我会使用 Bash 的子字符串扩展:
借助 GNU
awk
match
函数及其将捕获组用于数组的功能,可以尝试以下代码。使用正则表达式^.{2}(.{4})(.{4}).{2}\.xml$
创建 2 个捕获组并将值保存到名为 的数组中arr
,我们将使用该数组根据需要打印值。