sed的不同选项 - 获取重复行

时间:2017-10-13 03:04:34

标签: linux shell sed replace duplicates

我想在linux中的文件中找到一个文本,并用另一个文本替换这个文本。例如,将B101011938替换为B101011939

如果我使用Command1(C1),输出中会出现重复的行:

$ cat file
line1:B101011938
$ sed 's/B101011938/B101011939/p' file
line1:B101011939
line1:B101011939

如果我使用Command2(C2),则没有重复的行:

$ cat file
line1:B101011938
$ sed 's/B101011938/B101011939/g' file
line1:B101011939

我的问题是:这些命令有什么区别?

1 个答案:

答案 0 :(得分:0)

sed中的替换命令具有以下签名:

s/REGEX/replacement/flags

POSIX之后,flags的值应为零或更多:

  

n 仅代替在模式空间中找到的BRE的第n次出现。

     

g 全球替代BRE的所有非重叠实例,而不仅仅是第一个。如果同时指定了g和n,则结果未指定。

     

p 如果进行了替换,请将模式空间写入标准输出。

     

w wfile写。如果进行了替换,则将模式空间附加到wfile。符合条件的应用程序应在wfile参数之前包含一个或多个空格。如果w标志不是多个标志值的串联中给出的最后一个标志值,则结果是未定义的。

这意味着,当p标志正在使用时sed将输出模式空间(当前行,由s修改)。由于sed默认情况下已经输出了模式空间 - 除非正在使用-n命令行选项 - 这导致在输出中将修改后的行重复两次。