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

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

はじめに

シード (さん ストリーム itor) ユーティリティは、行指向のテキスト解析および変換ツールです。 sed コマンドは、単純なプログラミング言語と正規表現を使用して、テキスト ストリームとファイルを処理します。 sed で最もよく使われる機能 コマンドは文字列置換です。

このガイドでは、sed の使用方法を示します 例を通して文字列を検索して置換します。

前提条件

  • コマンドライン/ターミナルへのアクセス
  • テキスト ファイル (このガイドでは example.txt ファイル)
  • 基本的な端末コマンド (無料のチート シートを入手してください)。

sed の検索と置換の構文

sed を使用してテキストを検索して置換する構文 コマンドは:

sed -i 's/<search regex>/<replacement>/g' <input file>

コマンドは以下で構成されます:

  • -i sed を伝えます 標準出力の代わりにファイルに結果を書き込むコマンド
  • s 代替コマンドを示します。
  • / 最も一般的な区切り文字です。このコマンドは、区切り文字として他の文字も受け入れます。これは、文字列にスラッシュが含まれている場合に便利です。
  • <search regex> 文字列または正規表現の検索パラメータです。
  • <replacement> は置換テキストです。
  • g 最初の文字列だけでなく、すべての文字列を置換するグローバルな置換フラグです。
  • <input file> 検索と置換が行われるファイルです。

一重引用符は、シェルでのメタ文字の展開を避けるのに役立ちます。

sed の BDS バージョン (macOS を含む) は、大文字と小文字を区別しない一致またはファイルの置換をサポートしていません。ファイル置換のコマンドは次のようになります:

sed 's/<search regex>/<replacement>/g' <input file> > <output file>

または、GNU バージョンの sed をインストールします 自作の macOS で:

brew install gnu-sed

GNU sed を実行します コマンドは次のとおりです:

gsed -i 's/<search regex>/<replacement>/g' <input file>

sed を置き換えます gsed のコマンド 以下の例に従ってください。

sed 置換の例

このガイドの例では、サンプル ファイルを使用して文字列を置き換えています。

1. サンプル テキスト ファイルを作成します。

nano example.txt

2. 次のコンテンツを追加します:

foobarbazfoobarbaz
foo bar baz foo bar baz
Foo Bar Baz Foo Bar Baz
FOO BAR BAZ FOO BAR BAZ
/foo/bar/baz /foo/bar/baz

このファイルを入力として使用して、以下の例をテストしてください。

注意 :完全な sed の場合 Linux のコマンド チュートリアルについては、sed コマンドの Linux ガイドをご覧ください。

最初に一致した文字列を置換

1. bar という単語の最初に見つかったインスタンスを置き換えるには linux ファイルのすべての行で、次を実行します:

sed -i 's/bar/linux/' example.txt

2. -i タグは example.txt への変更を挿入します ファイル。 cat コマンドでファイルの内容を確認してください:

cat example.txt

このコマンドは bar の最初のインスタンスを置き換えます linux 部分文字列を含むすべての行で。大文字と小文字の違いを無視して、正確に一致します。

グローバル置換

ファイル内の一致するすべての文字列を置き換えるには、g を追加します スクリプトにフラグを立てます。例:

sed -i 's/bar/linux/g' example.txt

このコマンドは bar のすべてのインスタンスをグローバルに置き換えます linux

すべてのケースを一致させて置換

単語のすべてのインスタンスを検索して置換し、大文字を無視するには、I を使用します パラメータ:

sed -i 's/bar/linux/gI' example.txt

このコマンドは、単語 bar のすべてのインスタンスを置き換えます

部分文字列を無視

単語境界を追加 (\b ) sed ファイル内の文字列を置換するときに部分文字列を無視するコマンド。例:

sed -i 's/\bbar\b/linux/gI' example.txt

または、区切り文字を変更してコマンドを読みやすくします。

sed -i 's:\bbar\b:linux:gI' example.txt

このコマンドは部分文字列を無視し、単語全体のみに一致します。

文字列を検索してスラッシュに置き換える

スラッシュ文字をエスケープして、文字列を検索し、スラッシュに置き換えます。たとえば、/foo/bar/baz を置き換えるには /home/kb 、次の構文を使用します:

sed -i 's/\/foo\/bar\/baz/\/home\/kb/g' example.txt

または、エスケープ文字を避けるために区切り文字を変更します:

sed -i 's:/foo/bar/baz:/home/kb:g' example.txt

この構文を使用して、パスやその他の文字列をスラッシュに置き換えます。

検索して正規表現で置換

sed の検索パターン コマンドは、grep regex と同様の正規表現を受け入れます。たとえば、すべての大文字を一致させて 5 に置き換えるには 、使用:

sed -i 's/[A-Z]/5/g' example.txt

正規表現パターンは、すべての大文字を見つけてファイル内の数字に置き換えるのに役立ちます。

見つかった参照文字列

アンパサンド文字 (&) を使用します ) を使用して、見つかった文字列を参照します。たとえば、スラッシュを追加するには (/ ) foo のすべてのインスタンスの前 ファイルで、次を使用:

sed -i 's/foo/\/&/gI'example.txt

検索パラメータを再入力する代わりに、& sign は見つかった文字列を参照します。

バックアップを作成

既存のファイルを上書きする前にバックアップ ファイルを作成するには、.bak を追加します。 -i へのパラメーター タグ。

sed -i.bak 's/foo/FOO/g' example.txt

このコマンドはバックアップを作成します (example.txt.bak ) 元を上書きする前に。この方法を使用して、コピーを元の形式で保持し、上書きを回避します。

再帰的な検索と置換

find コマンドを使用してファイルを検索し、sed と結合します。 ファイル内の文字列を再帰的に置換します。例:

find -name 'example*' -exec sed -i 's/[a-z]/5/gI' {} +

このコマンドは、example で始まるすべてのファイルを検索します sed を実行します ファイルに対するコマンド。実行されたコマンドは、すべての文字を 5 に置き換えます 、大文字を無視します。

結論

このガイドの例を見れば、sed の使い方がわかります。 ファイル内の文字列を置換します。 sed コマンドは、多くの高度な機能を備えた強力なテキスト操作ユーティリティです。

次に、awk または gawk コマンドをチェックして、他のテキスト操作ツールについて学びます。


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

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

  3. 文字列をSedのスラッシュを含む文字列に置き換える方法は?

  1. シェルスクリプトでの検索と置換

  2. 一致するテキストを見つけて次の行を置き換える

  3. sedを使用して、ファイル内の行の範囲内のテキストを検索して置換します

  1. Awkおよび正規表現を使用してファイル内のテキストまたは文字列をフィルタリングする方法

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

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