2

その検索に代わってそのファイル内の単語を置き換えたいのではなく、ファイルから単語を検索したい。以下は、検索と置換を実行する必要があるファイルの内容です (これは .csv ファイルです)。ファイル名を test.csv- とします。

A,B,C,D,E
unix,123,crap,as,d
dpk,123,crap,as,d
shy,123,crap,as,d
ghn,123,crap,as,d
unnix,123,crap,as,d

以下は私が使用しているコマンドです-:

grep -rl 'unix' test.csv | xargs sed -i 's/crap/linux/1'

このコマンドの出力 -:

A,B,C,D,E
unix,123,linux,as,d
dpk,123,linux,as,d
shy,123,linux,as,d
ghn,123,linux,as,d
unnix,123,linux,as,d

しかし、ファイル全体からではなく、unix を含む行から単語 crap を sed に置き換える必要があります。この点で助けてください。または、これを行う他の方法はありますか。私が望む出力-:

A,B,C,D,E
unix,123,linux,as,d
dpk,123,crap,as,d
shy,123,crap,as,d
ghn,123,crap,as,d
unnix,123,crap,as,d
4

2 に答える 2

0
perl -pi -e 's/crap/linux if(/\bunix\b/)' your_file
于 2013-11-13T12:33:58.820 に答える
0

しかし、sedがファイル全体からではなく、crap含まれている行の単語を置き換える必要があることを望みますunix

あなたは言うことができます:

sed -i '/unix/s/crap/linux/' test.csv

編集:

によって生成されたフィルタリングされた出力でのみ置換を実行する場合はgrep、次のように言えます。

grep 'unix' test.csv | sed 's/crap/linux/'

出力をファイルに保存するには、リダイレクトを追加します。

grep 'unix' test.csv | sed 's/crap/linux/' > new.csv
于 2013-11-13T12:12:57.700 に答える