サンプルファイルを次に示します。
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
これはあなたのために働くはずです
sed -e 's_^all: .*_& anotherthing_'
Sコマンド(置換)を使用すると、正規表現を満たす行を検索できます。上記のコマンドでは、&
は一致した文字列を表します。
条件に一致する場合、awkの$0
にテキストを追加できます。
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
Bashの場合:
while read -r line ; do
[[ $line == all:* ]] && line+=" anotherthing"
echo "$line"
done < filename
Sedを使用した別の簡単なソリューションを次に示します。
$ sed -i 's/all.*/& anotherthing/g' filename.txt
説明:
all。*は、「all」で始まるすべての行を意味します。
&一致を表します(「all」で始まる完全な行)
次に、sedを前者を後のものに置き換え、「別のもの」という単語を追加します
Awkを使用したソリューション:
awk '{if ($1 ~ /^all/) print $0, "anotherthing"; else print $0}' file
単純に:行がall
で始まる場合、行に「anotherthing」を加えて印刷し、そうでない場合は行のみを印刷します。