sedまたはawkのパターンを含む行の終わりに追加するにはどうすればよいですか?


89

サンプルファイルは次のとおりです。

somestuff...
all: thing otherthing
some other stuff

私がやりたいのは、次のall:ように始まる行に追加することです。

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

回答:


166

これは私のために働きます

sed '/^all:/ s/$/ anotherthing/' file

最初の部分は見つけるパターンであり、2番目の部分は$行の終わりに使用する通常のsedの置換です。

プロセス中にファイルを変更する場合は、-iオプションを使用します

sed -i '/^all:/ s/$/ anotherthing/' file

または、別のファイルにリダイレクトすることもできます

sed '/^all:/ s/$/ anotherthing/' file > output

何かを追加するだけで新しい行につながります。置換は正しい方法です。
zhy 2018年

10

これはあなたのために働くはずです

sed -e 's_^all: .*_& anotherthing_'

sコマンド(置換)を使用すると、正規表現を満たす行を検索できます。上記のコマンド&で、は一致した文字列を表します。


9

$0条件に一致する場合は、awkにテキストを追加できます。

awk '/^all:/ {$0=$0" anotherthing"} 1' file

説明

  • /patt/ {...}行がで指定されたパターンと一致する場合は、でpatt説明されているアクションを実行します{}
  • この場合:/^all:/ {$0=$0" anotherthing"}行が(で表される^)で始まる場合は、行にall:追加anotherthingします。
  • 1真の条件として、デフォルトのアクションをトリガーしますawk:現在の行を出力します(print $0)。これは常に発生するため、元の行または変更された行のいずれかが印刷されます。

テスト

指定された入力に対して、次を返します。

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

変数に追加するテキストを指定することもできることに注意してください。

$ awk -v mytext=" EXTRA TEXT" '/^all:/ {$0=$0mytext} 1' file
somestuff...
all: thing otherthing EXTRA TEXT
some other stuff

Solarisではエラーが発生します:awk: can't set $0
ceving

@cevingを使用/usr/xpg4/bin/awkすると、「良い」awkを使用できます。
fedorqui'SOは害をやめる '2016


6

これはsedを使用した別の簡単な解決策です。

$ sed -i 's/all.*/& anotherthing/g' filename.txt

説明:

all。*は、「all」で始まるすべての行を意味します。

&一致を表します(つまり、「all」で始まる完全な行)

次に、sedは前者を後者に置き換え、「anotherthing」という単語を追加します


3

awkによる解決策:

awk '{if ($1 ~ /^all/) print $0, "anotherthing"; else print $0}' file

簡単に言うと、行がall「行の印刷」と「別の」で始まる場合は、行だけを印刷します。


4
:あなたはにいることを短縮することができますawk '$1=="all:" {$(NF+1)="anotherthing"} 1'
グレンはジャックマン

2
@ Prometheus、awkスクリプトはcondition {actions}ペアで構成されています。をcondition省略すると、すべてのレコードに対してアクションが実行されます。場合は{actions}省略し、条件があると評価され、真の(数のケースである1)、デフォルトのアクションは、現在のレコードを印刷することです。
glenn jackman 2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.