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

Unix Sed チュートリアル:正規表現を使用してファイル内のテキストを検索および置換する

この記事は、進行中の Unix Sed チュートリアル シリーズの一部です。以前の記事では、sed print 操作と sed delete 操作について説明しました。

この記事では、sed 代替コマンド「s」の使用方法を確認します。

`s' コマンドはおそらく `sed' で最も重要であり、多くの異なるオプションがあります。

`s' コマンドは、指定された REGEXP に対してパターン スペースを一致させようとします。一致が成功した場合、一致したパターン スペースの部分は REPLACEMENT に置き換えられます。

Syntax:

#sed 'ADDRESSs/REGEXP/REPLACEMENT/FLAGS' filename
#sed 'PATTERNs/REGEXP/REPLACEMENT/FLAGS' filename
  • s は代替コマンドです
  • / は区切り文字です
  • REGEXP は照合する正規表現です
  • REPLACEMENT は置き換える値です

FLAGS は次のいずれかです

  • g REGEXP のすべてのインスタンスを REPLACEMENT に置き換えます
  • n は任意の数です。REGEXP の n 番目のインスタンスを REPLACEMENT に置き換えます。
  • p 置換が行われた場合、新しいパターン スペースを出力します。
  • 大文字と小文字を区別しない方法で REGEXP に一致します。
  • w ファイル 置換が行われた場合、結果を指定されたファイルに書き出します。
  • / の代わりに別の区切り文字 ( @ %; :のいずれか) を使用できます

最初に、以下で説明するすべての例で使用される geekstuff.txt ファイルを作成しましょう。

$ cat thegeekstuff.txt
# Instruction Guides
1. Linux Sysadmin, Linux Scripting etc.
2. Databases - Oracle, mySQL etc.
3. Security (Firewall, Network, Online Security etc)
4. Storage in Linux
5. Productivity (Too many technologies to explore, not much time available)
#  Additional FAQS
6. Windows- Sysadmin, reboot etc.

置換の興味深い例をいくつか見てみましょう。

1. sed s//を使用して単語「Linux」を「Linux-Unix」に置き換えます

以下の例では、出力行に「1. Linux-Unix Sysadmin、Linux Scripting など」最初の Linux のみが Linux-Unix に置き換えられました。フラグが指定されていない場合、行の最初の一致が置き換えられます。

$ sed 's/Linux/Linux-Unix/' thegeekstuff.txt
# Instruction Guides
1. Linux-Unix Sysadmin, Linux Scripting etc.
2. Databases - Oracle, mySQL etc.
3. Security (Firewall, Network, Online Security etc)
4. Storage in Linux-Unix
5. Productivity (Too many technologies to explore, not much time available)
#  Additional FAQS
6. Windows- Sysadmin, reboot etc.

2. sed s//g を使用して単語のすべての外観を置換

以下の sed コマンドは、グローバル置換フラグ「g」を使用して、すべての Linux を Linux-Unix に置き換えます。

$ sed 's/Linux/Linux-Unix/g' thegeekstuff.txt
# Instruction Guides
1. Linux-Unix Sysadmin, Linux-Unix Scripting etc.
2. Databases - Oracle, mySQL etc.
3. Security (Firewall, Network, Online Security etc)
4. Storage in Linux-Unix
5. Productivity (Too many technologies to explore, not much time available)
#  Additional FAQS
6. Windows- Sysadmin, reboot etc.

3. sed s//2 を使用して単語の 2 番目の出現のみを置換

以下の例では、出力行に「1. Linux システム管理者、Linux-Unix スクリプティングなど」 Linux の 2 回目の発生のみが Linux-Unix に置き換えられます。

$ sed 's/Linux/Linux-Unix/2' thegeekstuff.txt
# Instruction Guides
1. Linux Sysadmin, Linux-Unix Scripting etc.
2. Databases - Oracle, mySQL etc.
3. Security (Firewall, Network, Online Security etc)
4. Storage in Linux
5. Productivity (Too many technologies to explore, not much time available)
#  Additional FAQS
6. Windows- Sysadmin, reboot etc.

4.変更をファイルに書き込み、sed s//gpw を使用して変更を出力する

以下の例では、3 つのフラグで置き換えています。これは、Linux のすべての発生を Linux-Unix に置き換え、置き換えられた出力を出力するだけでなく、指定されたファイルに同じものを書き込みます。

$ sed -n 's/Linux/Linux-Unix/gpw output' thegeekstuff.txt
1. Linux-Unix Sysadmin, Linux-Unix Scripting etc.
4. Storage in Linux-Unix
$ cat output
1. Linux-Unix Sysadmin, Linux-Unix Scripting etc.
4. Storage in Linux-Unix

5. sedを使ってパターンと一致した場合のみ置換

この例では、行がパターン「-」と一致する場合、「-」からのすべての文字が空に置き換えられます。

$ sed '/\-/s/\-.*//g' thegeekstuff.txt
# Instruction Guides
1. Linux Sysadmin, Linux Scripting etc.
2. Databases
3. Security (Firewall, Network, Online Security etc)
4. Storage in Linux
5. Productivity (Too many technologies to explore, not much time available)
#  Additional FAQS
6. Windows

6. sed を使用して各行から最後の X 文字を削除する

この sed の例は、各行から最後の 3 文字を削除します。

$ sed 's/...$//' thegeekstuff.txt
# Instruction Gui
1. Linux Sysadmin, Linux Scripting e
2. Databases - Oracle, mySQL e
3. Security (Firewall, Network, Online Security e
4. Storage in Li
5. Productivity (Too many technologies to explore, not much time availab
#  Additional F
6. Windows- Sysadmin, reboot e

7. sed を使用してコメントを削除する

以下に示すように、sed コマンドを使用して、ファイルからすべてのコメント行を削除します。

$  sed -e 's/#.*//' thegeekstuff.txt

1. Linux Sysadmin, Linux Scripting etc.
2. Databases - Oracle, mySQL etc.
3. Security (Firewall, Network, Online Security etc)
4. Storage in Linux
5. Productivity (Too many technologies to explore, not much time available)

6. Windows- Sysadmin, reboot etc.

8. sed を使用してコメントと空行を削除する

この例では、「;」で区切られた 2 つのコマンドがあります

  • 最初のコマンドは # で始まる行を空白行に置き換えます
  • 2 番目のコマンドは空行を削除します。
$ sed -e 's/#.*//;/^$/d'  thegeekstuff.txt
1. Linux Sysadmin, Linux Scripting etc.
2. Databases - Oracle, mySQL etc.
3. Security (Firewall, Network, Online Security etc)
4. Storage in Linux
5. Productivity (Too many technologies to explore, not much time available)
6. Windows- Sysadmin, reboot etc.

9. sed を使用して DOS 改行 (CR/LF) を Unix 形式に変換します

DOS ファイルを Unix にコピーします。各行の最後に \r\n があります。

この例では、sed コマンドを使用して DOS ファイル形式を Unix ファイル形式に変換します。

$sed 's/.$//' filename

10. sed を使用してファイルから HTML タグを削除する

この例では、sed コマンドで指定された正規表現が html タグに一致し、空のタグに置き換えられます。

$ sed -e 's/<[^>]*>//g'
This <b> is </b> an <i>example</i>.
This  is  an example.

Linux
  1. 大きなファイルにSedとParallelを使用して、行を別のコンテンツに置き換えますか?

  2. 「sed」を使用して検索して置換しますか?

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

  1. Linuxでsedを使用してテキストファイルを検索および置換する

  2. LinuxでSed、ex、perlコマンドを使用してテキストを検索および置換する

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

  1. Bash を使用してファイルを検索してコピーする

  2. テキストファイルの行末を見つける方法は?

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