示例编号:
12345678
我的尝试:
sed 's/(.)(.)/21/'
我的结果:
21345678
这里的这一行将交换数字的第一个位置和第二个位置。我似乎还不知道如何处理进一步的职位。
您可以将第 4 个字母和第 7 个字母交换为:
sed 's/([0-9]{3})([0-9])([0-9]{2})([0-9])/1432/' <<< "12345678"
输出:
12375648
你只需要修改它来捕获更多的组,并按照所需的顺序输出它们:
sed 's/^(...)(.)(..)(.)/1432/'
# | | | | |
# | | | | +- digit #7(4)
# | | | +----- 2 chars (3)
# | | +-------- digit #4 (2)
# | +------------ 3 chars (1)
# +--------------- start-of-line anchor
请记住,这是最简单的情况,您只想交换字符位置,无论它们是否是数字。您可以轻松地重新扩展角色类以限制交换的内容,但我在这里的目的只是展示实现交换的最简单方法。
使用起来似乎更干净 awk
:
$ echo 12345678 | awk '{t=$4; $4=$7; $7=t}1' FS= OFS=
12375648
这可能对你有用(GNU sed(:
sed -E 's/./n&/7;s//n&/4;s/n(.)(.*)n(.)/321/' file
在字符位置引入换行符,并使用模式匹配来交换这些字符。
注:注:替换的正常流程必须反转,否则引入的换行符将影响原始字符串的长度。
使用通过-E
选项支持 ERE 的 sed,例如 GNU sed 和 OSX/BSD sed:
$ echo '12345678' | sed -E 's/(.{3})(.)(.{2})(.)/1432/'
12375648