Sed捕获重复的数字组

时间:2019-05-07 18:39:49

标签: bash macos unix sed

我正在尝试使用sed捕获类似以下示例的组:

123123 (i would want the first group 123)
144144 (I would want the group 144)

但是sed似乎并没有意识到\ 1是什么。

有什么办法可以使用sed做到这一点?之后,我想用特定的字符串替换第一组。

([0-9]+)\1 

我已经尝试使用上述正则表达式,但sed似乎没有意识到我要做什么。

也尝试过:

~/Desktop$ cat file
123123
23231
12323
123231
12345
144144
~/Desktop$ sed -n 's/.*\b\([[:digit:]]\{1,\}\)\1\b.*/\1/p' file
~/Desktop$ 

~/Desktop$ sed -n -E 's/([0-9]+)\1/specificstring\1/p' file
specificstring12323
specificstring2323
specificstring12323
specificstring14444

~/Desktop$ sed -nE 's/^([0-9]+)\1([^0-9]|$)/\1/p' file
2323
12323

3 个答案:

答案 0 :(得分:3)

使用BRE,并避免使用+,因为它不是POSIX RE的一部分。

$ cat file
123123
23231
12323
123231
12345
144144
$ 
$ sed -n 's/^\([0-9]\{1,\}\)\1$/\1/p' file
123
144

答案 1 :(得分:1)

  

之后我想用特定的字符串替换第一组。

使用GNU sed

sed -n -E 's/([0-9]+)\1/specificstring\1/p' file

要点

  • -n抑制我们使用p命令的print(s)标志覆盖的输出。
  • -E启用扩展的正则表达式。

注意 但是,这不会在没有相同组的行中打印出来,而在问题中没有提到存在相同组的行。

答案 2 :(得分:1)

鉴于该文件仅包含6位数字,并且不能像这样进行其他操作:

<ul>