サンプルファイルは次のとおりです。
somestuff...
all: thing otherthing
some other stuff
私がやりたいのは、次のall:
ように始まる行に追加することです。
somestuff...
all: thing otherthing anotherthing
some other stuff
回答:
これは私のために働きます
sed '/^all:/ s/$/ anotherthing/' file
最初の部分は見つけるパターンであり、2番目の部分は$
行の終わりに使用する通常のsedの置換です。
プロセス中にファイルを変更する場合は、-i
オプションを使用します
sed -i '/^all:/ s/$/ anotherthing/' file
または、別のファイルにリダイレクトすることもできます
sed '/^all:/ s/$/ anotherthing/' file > output
$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
awk: can't set $0
/usr/xpg4/bin/awk
すると、「良い」awkを使用できます。
awkによる解決策:
awk '{if ($1 ~ /^all/) print $0, "anotherthing"; else print $0}' file
簡単に言うと、行がall
「行の印刷」と「別の」で始まる場合は、行だけを印刷します。
awk '$1=="all:" {$(NF+1)="anotherthing"} 1'
condition {actions}
ペアで構成されています。をcondition
省略すると、すべてのレコードに対してアクションが実行されます。場合は{actions}
省略し、条件があると評価され、真の(数のケースである1
)、デフォルトのアクションは、現在のレコードを印刷することです。