我想在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
我的问题是:这些命令有什么区别?
答案 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
命令行选项 - 这导致在输出中将修改后的行重复两次。