2017-10-13 43 views
-1

我想找到在linux下一个文件中的文本和替换另一个文本这个文本。例如通过B101011939不同的选择 - 获得重复的行或不

取代B101011938如果我使用COMMAND1(C1),有重复的线路中的输出:

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

如果我使用命令2(C2)时,不存在重复的行:

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

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

回答

0

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

s/REGEX/replacement/flags 

POSIX,标志的值应是零或多个:

Ñ替换为第n次出现只在模式空间内发现的BRE。

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

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

W¯¯ wfile写。如果进行了替换,则将模式空间追加到wfile。一致性应用程序应在wfile参数之前加上一个或多个空格。如果W标志是不是在多个标志值的串联给出的最后一个标志值,结果是不确定的。


这意味着,当p标志处于使用sed将输出模式空间(当前行,通过s修改)。由于sed将已经输出默认模式空间 - 除非-n命令行选项是在使用中 - 这将导致具有在输出两次被修改线。