source.txt
の内容:
gold green white black blue
yellow Magenta brown
tram kilo charlie tango
皆さんこんにちは!私は謎を解く必要があります。
小さなスクリプトを実行してファイルをsource.txt
にパイプし、grep
出力をsed
にパイプして文字列を置き換え、その行を新しいファイルに保存しようとしていますpol.txt
grep -l "gold" source.txt | xargs sed 's/green/red/' > pol.txt
その行だけをpol.txt
に格納する代わりに、
gold red white black blue
置換した文字列を含むファイル全体を持っています
gold red white black blue
yellow Magenta brown
tram kilo charlie tango
オプション-l
をgrepコマンドから削除すると、これがあり、もちろんpol.txtには何もありません。
sed: can't read gold: No such file or directory
sed: can't read green: No such file or directory
sed: can't read white: No such file or directory
sed: can't read black: No such file or directory
sed: can't read blue: No such file or directory
grep
はテスターとして必要であり、残念ながら "if"はオプションではありません。
Source.txtからgold
を含む行を選択し、最初に出現するgreen
をred
で置き換えるには:
$ sed -n '/gold/{s/green/red/; p}' source.txt
gold red white black blue
それをファイルに保存するには:
sed -n '/gold/{s/green/red/; p}' source.txt >pol.txt
-n
明示的に要求しない限り、sedに行を印刷しないように指示します。
/gold/
は、正規表現gold
に一致する行を選択します。
s/green/red/
置換を実行します
p
印刷します。
同じロジックで:
$ awk '/gold/{gsub(/green/, "red"); print}' source.txt
gold red white black blue
まだ説明されていない理由で、grepパイプラインを使用せざるを得ない場合は、以下を試してください。
$ grep -l --null "gold" source.txt | xargs -0 sed -n '/gold/s/green/red/p'
gold red white black blue
grep -l "gold" source.txt
は、ファイルにWordゴールドが含まれている場合はsource.txt
を出力しますxargs sed 's/green/red/'
はsed 's/green/red/' source.txt
を実行し、最後のリダイレクトは結果を出力に保存します。
私があなたの意図を正しく理解している場合は、次のコマンドが必要です。
sed -n '/gold/s/green/red/p' source.txt > pol.txt
/gold/
はgold
に一致する行を選択し、s
コマンドは必要な置換を行います。