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

StackOverflow https://stackoverflow.com/questions/155934

  •  03-07-2019
  •  | 
  •  

質問

ファイルの検索と置換を実行するにはどの 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                   スクリプトで拡張正規表現を使用します。

FreeBSD バージョンもこれらのオプションをサポートしています。 NetBSD および OpenBSD バージョンは -r のみをサポートしています。

sedの詳細については、 Cori は、このチュートリアルを提案しています。

他のヒント

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の仕事です。

Perl の代替として Ruby を検討してください。Perl のワンライナー コマンドライン引数の大部分を盗みました (-i, -p, -l, -e, -n) と自動セット $_ Perl と同じように、正規表現の優れた点がたくさんあります。さらに、Ruby の構文は Perl や sed よりも快適で読み書きが簡単です。(そうでないかはあなたの好みに応じて異なります。)

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 、ストリームエディター、そして、はい、正規表現を使用します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top