如何将第 4 位等数字位置交换为第 7 位

  • 本文关键字:位置 交换 数字 linux sed
  • 更新时间 :
  • 英文 :


示例编号:

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

相关内容

  • 没有找到相关文章

最新更新