2017-10-13 47 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命令行選項是在使用中 - 這將導致具有在輸出兩次被修改線。