ファイルの検索と置換を実行するには、どの GNU/Linux コマンドライン ツールを使用しますか?
検索テキストと置換を正規表現形式で指定できますか?
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 スクリプトで拡張正規表現を使用します。
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 の仕事です。
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 を使用するかを気にするほど、パフォーマンスは問題ではありません。書きやすいものを使用してください。
sed、ストリーム エディター、およびはい、正規表現を使用します。