26

ファイルの検索と置換を実行するには、どの GNU/Linux コマンドライン ツールを使用しますか?

検索テキストと置換を正規表現形式で指定できますか?

4

4 に答える 4

52
sed 's/a.*b/xyz/g;' old_file > new_file

GNU sed (おそらく持っているもの) はさらに用途が広い:

sed -r --in-place 's/a(.*)b/x\1y/g;' your_file

これらのオプションの簡単な説明は次のとおりです。

-i[SUFFIX], --in-place[=SUFFIX] ファイルをその場で編集 (拡張子が指定されている場合はバックアップを作成)

-r, --regexp-extended スクリプトで拡張正規表現を使用します。

FreeBSDNetBSD、およびOpenBSDバージョンもこれらのオプションをサポートしています。

sed について詳しく知りたい場合は、Coriがこのチュートリアルを提案しています。

于 2008-10-01T02:08:34.980 に答える
28

Perl はこのために発明されました。

perl -pi -e 's/foo/bar/g;' *.txt

これらの一重引用符内の通常の s/// パターン。次のような方法でバックアップを保持できます。

perl -pi.bak -e 's/foo/bar/g;' *.txt

またはパイプライン:

cat file.txt | perl -ne 's/foo/bar/g;' | less

しかし、それは本当に sed の仕事です。

于 2008-10-01T02:04:16.007 に答える
6

Ruby を Perl の代替として検討してください。Perl のワンライナー コマンドライン引数 ( -i-p-l、) のほとんどを盗み、Perl のように自動設定し-e、多くの正規表現の利点を備えています。さらに、Ruby の構文は、Perl や sed よりも快適で、読み書きが簡単です。(好みに応じて、またはしないでください。)-n$_

ruby -pi.bak -e '$_.gsub!(/foo|bar/){|x| x.upcase}' *.txt

対。

perl -pi.bak -e 's/(foo|bar)/\U\1/g' *.txt

多くの場合、ワンライナーを扱う場合、軽量の sed を使用するか、重量の重い Perl を使用するか、より重量の重い Ruby を使用するかを気にするほど、パフォーマンスは問題ではありません。書きやすいものを使用してください。

于 2008-10-01T19:41:44.013 に答える
5

sed、ストリーム エディター、およびはい、正規表現を使用します。

于 2008-10-01T02:04:44.333 に答える