GNU/Linux >> Linux の 問題 >  >> Ubuntu

SEDコマンドを使用してファイル内の文字列を検索および置換する方法

はじめに

SedはSの略です tream ED itor。これは、テキストファイル内の単語や行の検索、検索、置換、または挿入と削除に使用されるLinuxコマンドです。

Sedコマンドの最も一般的な使用例は、ファイル内の文字列を見つけて置き換えることです。 Sedコマンドを使用すると、ファイルを開かなくても編集できます。

この記事では、Sedコマンドを使用してファイル内の文字列を検索および置換する方法について詳しく説明します。

このチュートリアルのすべての例は、Ubuntu20.04で実行されました。

検索して置換

デフォルトでは、SedはほとんどのLinuxディストリビューションにインストールされています。 LinuxシステムにSedがインストールされていることを確認するには、次のコマンドを実行します。

$ sed --v

出力は次のようになります:

Sedコマンドを使用してテキストを検索および置換する基本的な構文は次のとおりです。

$ sed -i 's/Search_pattern/Replacement_pattern/g' FILE

その中で:

-i:このオプションを使用すると、出力を標準出力に書き込む代わりに、Sedコマンドでファイルを編集できます。

s:代替の略です。

//:区切り文字。

g:グローバル置換フラグです。

FILE:Sedコマンドで操作するファイル。

検索パターン、置換パターン、およびその他の引数を引用符で囲むことを強くお勧めします。

たとえば、デモに使用したテキストファイルは次のとおりです。

567 Test test test
test /bin/zsh linuxways.net testbar 789

すべての「テスト」単語を「Linux」単語に置き換えるには、次のコマンドを実行します。

$ sed -i 's/test/linux/g' test.txt

出力:

gフラグを使用しない場合、各行で最初に出現する検索パターンのみが置き換えられます。

$ sed -i 's/test/linux/' test.txt

出力:

ご覧のとおり、前の例では、テストバー文字列内のサブ文字列テストも配置されています。検索パターンの部分文字列を置き換えたくない場合は、検索パターンを2つの単語境界\ bの間に配置しましょう:

$ sed -i 's/\btest\b/linux/g' test.txt

出力:

検索パターンの一致で大文字と小文字を区別しないようにするには、Iフラグを使用します。

$ sed -i 's/test/linux/gI' test.txt

出力:

Linuxの世界では、テキストファイルに区切り文字が含まれる多くのユースケースに遭遇します。区切り文字を区切るには、円記号\を使用する必要があります。たとえば、/ bin/zshを/usr/ bin / bashに置き換えるには、次のコマンドを実行します。

$ sed -i 's/\/bin\/zsh/\/usr\/bin\/bash/g' test.txt

出力:

再帰的な検索と置換

多くの場合、特定の文字列を持つファイルをディレクトリで再帰的に検索し、すべてのファイルでその文字列を置き換えます。

たとえば、次のコマンドは、現在のディレクトリ内のすべてのファイルで文字列「way」を検索して「road」に置き換えます。

$ find . -type f -exec sed -i 's/way/road/g' {} +

ファイル名にスペース文字が含まれている場合は、-print0オプションを使用しましょう:

$ find . -type f -print0 | xargs -0 sed -i 's/way/road/g'

特定の拡張子を持つファイルでのみ文字列を検索して置き換えるには、次のコマンドを実行します。

$ find . -type f -name "*.java" -print0 | xargs -0 sed -i 's/way/road/g'

結論

Sedコマンドを使用する一般的な例をいくつか見てきました。ファイル内のテキスト文字列を検索してSedコマンドで置き換えることは、想像どおりに複雑ではありません。

ご不明な点がございましたら、コメント欄でお知らせください。


Ubuntu
  1. コマンドラインでのファイルの検索(ハウツー)

  2. ディレクトリとサブディレクトリ内のファイル数を見つける方法

  3. ファイル内の文字列を置き換える方法は?

  1. Sedを使用して複数行の文字列を置き換える方法は?

  2. Linux の find コマンドを使用してファイルを検索する方法

  3. Linuxコマンドラインで複数のファイルの文字列を置き換える方法

  1. Grepコマンドを使用してファイル内のテキストを検索する方法

  2. SEDコマンドを使用してファイル内の文字列を検索して置換する-Ubuntuでこのタスクを実行するにはどうすればよいですか?

  3. grep と sed を使用して文字列を検索して置換する