sedはストリームエディタの略です。指定されたファイルを読み取り、sedコマンドのリストで指定されたとおりに入力を変更します。
デフォルトでは、入力は画面に書き込まれますが、ファイルを強制的に更新することができます。
Sed(Stream EDitor)Linuxコマンドは、テキストファイル内の単語や行の検索、検索、置換、または挿入と削除に使用されます。
Sedコマンドの最も一般的な使用例は、ファイル内の文字列を見つけて置き換えることです。 Sedコマンドを使用すると、ファイルを開かなくても編集できます。
ここLinuxAPTでは、サーバー管理サービスの一環として、お客様がLinuxサーバー関連のクエリを実行するのを定期的に支援しています。
これに関連して、Sedコマンドを使用してUbuntu20.04システムのファイル内の文字列を検索および置換する方法を検討します。
Ubuntuで検索して置換
デフォルトでは、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 linuxapt.com testbar 789
すべての「test」の単語を「linux」の単語に置き換えるには、次のコマンドを実行します。
$ sed -i 's/test/linux/g' test.txt
gフラグを使用しない場合、各行で最初に出現する検索パターンのみが置き換えられます。
$ sed -i 's/test/linux/' 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
再帰的な検索と置換
多くの場合、特定の文字列を持つファイルをディレクトリで再帰的に検索し、すべてのファイルでその文字列を置き換えます。
たとえば、次のコマンドは、現在のディレクトリ内のすべてのファイルで文字列「apt」を検索して「road」に置き換えます。
$ find . -type f -exec sed -i 's/apt/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/apt/road/g'