AIX系统中用cut无法从后往前截取调整字符串顺序,求解决方案
AIX下调整字符串顺序的替代方案
AIX系统的cut命令存在限制:它会自动按照字符在原字符串中的位置从小到大排序输出,不管你指定的截取顺序(比如你执行echo FT0215202301.xml | cut -b 7-10,5-6,3-4,实际会按3-4、5-6、7-10的顺序输出,得到02152023),因此无法直接用cut实现自定义顺序的字符串拼接。
可以用以下两种系统自带工具实现需求:
方法一:使用awk
利用awk的substr函数精准截取子串,再按目标顺序拼接:
echo FT0215202301.xml | awk '{print substr($0,7,4) substr($0,5,2) substr($0,3,2)}'
substr($0,7,4):从第7个字符开始截取4位(对应2023)substr($0,5,2):从第5个字符开始截取2位(对应02)substr($0,3,2):从第3个字符开始截取2位(对应15)
拼接后直接得到期望结果20230215。
方法二:使用sed
通过正则捕获组提取目标片段,再重排输出:
# 适配支持扩展正则的AIX sed版本 echo FT0215202301.xml | sed -E 's/^..(..)(..)(....).*/\3\1\2/' # 兼容所有AIX版本的基本正则写法 echo FT0215202301.xml | sed 's/^..\(..\)\(..\)\(....\).*/\3\1\2/'
- 正则
^..(..)(..)(....).*:匹配开头2个字符后,依次捕获3-4位、5-6位、7-10位的内容 - 替换符
\3\1\2:将捕获到的内容按「第三个组、第一个组、第二个组」的顺序拼接,输出目标结果。
内容的提问来源于stack exchange,提问作者Matias Araya
相关产品推荐
相关产品推荐

