具体sed命令理解

具体sed命令理解

嘿,尽管我进行了研究,但我一直在努力破译特定的 sed 命令会做什么,但我似乎被难住了。

sed -E  's/([0-9]+)-([0-9]+)/\2:\1/g'    

答案1

您的sed表达式是一个替换,它将破折号周围的每对不重叠的正整数交换,并用冒号替换破折号。

你的表情会转变

000-212 444-818

进入

212:000 818:444

这些(...)位是“捕获组”。这样的组捕获与其内的表达式匹配的子字符串。然后,该子字符串可\1用于第一组、\2第二组等。

您的捕获组都使用[0-9]+,这是一种匹配 0 到 9 之间的非空数字序列的模式,例如字符串123000

-两组之间的 会与数据中的文字破折号匹配。

替换字符串使用组匹配的数字,但以与匹配方式相反的顺序使用它们,并交换它们。替换文本还会:-数字之间插入。

最后/g,重复sed替换数据中所有不重叠的匹配项。

使实用程序使用的非标准-E选项sed扩展正则表达式 (ERE) 而不是基本正则表达式 (BRE),后者是sed.在 ERE 中,捕获组写作(...),而 BRE 使用\(...\)。 BRE 也不必+指定表达式的非空匹配序列,而是可以使用\{1,\}

因此,您的命令也可以写成可移植的

sed 's/\([0-9]\{1,\}\)-\([0-9]\{1,\}\)/\2:\1/g'

或作为

sed 's/\([0-9][0-9]*\)-\([0-9][0-9]*\)/\2:\1/g'

相关内容