簡體   English   中英

sed中不同模式的不同替換

[英]Different replacements for different patterns in sed

我需要在文件的每一行中替換兩個模式。 讓我們說例如該文件包含以下內容:

pattern1 a1 b1 c1
pattern2 a2 b2 c2
pattern1 a1 b1 c1

基本上,出現“pattern1”的任何地方,a1需要替換為b2的a2和b1,依此類推。 但是,我也想將pattern1更改為pattern2。

到目前為止,我有一些接近的東西:

/pattern1/ s/a1 b1 c1/a2 b2 c2/

注意,我想將整個sed腳本保存在一個文件中。

更新所需的輸出,這可能不是最好的例子,我會回答任何問題。

pattern2 a2 b2 c2
pattern2 a2 b2 c2
pattern2 a2 b2 c2

有各種方法可以做到這一點。

sed -e '/pattern1/{
        s/a2/a1/
        s/b2/b1/
        s/c2/c1/
        s/pattern1/pattern2/
        }' "$@"

您通常可以使用分號代替換行符將其折疊為單行(但是某些版本的sed比其他版本更為繁瑣)。 在這種情況下, -e並非絕對必要。

從'a1'是否應該用'a2'代替,反之亦然,這個問題並不完全清楚; 這段代碼的作用是“a1需要替換為a2”(意思是“用a1替換a2的出現次數”),但是這個例子暗示了相反的替換。 如果需要其他含義,則使用s/a1/a2/而不是s/a2/a1/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM