まだ存在しない場合にのみ、各行の先頭に文字を追加してください。

まだ存在しない場合にのみ、各行の先頭に文字を追加してください。

行で区切られたユーザー名のみを含むテキストファイルの例は次のとおりです。

@Alice 
@Bob 
Cindy 
Leon 
@Mark

@その行がまだ含まれていないすべての行の先頭にどのように追加しますか?

答え1

sedスクリプトのステートメントには行番号またはアドレスにすることができ、(not)に反転できるパターンがあるため、ここに次のように書くこと[address[,address]][!] actionができます。address/regexp/!

sed '/^@/! s/^/@/' < file

@まだ存在しない行の先頭にを追加します。

アドレスは(line start()の後の行/^@/)です。これは反転され、ジョブ(代わりにラインスタートを使用)が一致しない行でのみ実行されます。@^!s/^/@/s@

次の方法で同じ効果が得られます。

sed 's/^@\{0,1\}/@/' < file

@先行 0 または 1 は@ERE と同じです。

sed -E 's/^@?/@/' < file

関連情報