はじめに
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コマンドで置き換えることは、想像どおりに複雑ではありません。
ご不明な点がございましたら、コメント欄でお知らせください。