2017-03-01 7 views
2

sedを使用して一般的なパターンと一致する行の末尾にテキストを追加する方法の例がいくつかあります。 Here's one example。その例では

、ポスターは

somestuff... 
all: thing otherthing 
some other stuff 

で始まり、このように、all:の末尾に追加したい:

somestuff... 
all: thing otherthing anotherthing 
some other stuff 

すべてが順調と良いです。しかし、anotherthingが既にある場合はどうなりますか?

私はall:で始まる行、それはラインから欠落している場合にのみそれを追加anotherthing、そしての存在をテストを見つけるしたいと思います。

どうすればよいですか?

私の特定のケースではboot=fips=1の存在をgrub.confkernelラインをテストし、これらの引数のいずれかまたは両方を追加してのみ場合、彼らはラインになっていないです。これはあなたのために働くかもしれない

答えて

1

(。私は検索は/ idempotentであることを追加したい)(GNUのSED):

sed '/^all:/!b;/anotherthing/!s/$/ anotherthing/' file 

Disrequard任意の行がall:始まるとanotherthingを含まないだけで代用ラインではありません。

1

あなたが与えられた文字列の存在をチェックし、それが存在しない場合のみ、それを追加するために、このawkを使用することができます。anotherthingと

awk -v s='anotherthing' '/^all:/ && $0 !~ s "$" { $0 = $0 OFS s } 1' file 
1

スキップラインとall:

で始まる残りの行に追加します
sed '/anotherthing/!s/^all:.*$/& anotherthing/' file 
関連する問題