この記事は、進行中の Unix sed コマンド チュートリアル シリーズの一部です。以前の記事では、単一のコマンド (印刷、削除、置換、ファイル書き込み) で sed を学びました。
Sed は、ファイル内の行に対して多数の操作を実行するための多くのコマンドを提供します。
この記事では、ファイルの行を追加、挿入、置換する方法と、ファイルの行番号を取得する方法を確認します。
- 行を追加
- 行を挿入
- 改行
- 行数を数える
最初に、以下で説明するすべての例で使用される geekstuff.txt ファイルを作成しましょう。
$cat thegeekstuff.txt Linux Sysadmin Databases - Oracle, mySQL etc. Security (Firewall, Network, Online Security etc) Storage in Linux Productivity (Too many technologies to explore, not much time available) Windows- Sysadmin, reboot etc.
Sed コマンドを使用して行を追加
Sed は、各行の後にアドレスまたはパターンを追加するコマンド「a」を提供します。
Syntax: #sed 'ADDRESS a\ Line which you want to append' filename #sed '/PATTERN/ a\ Line which you want to append' filename
Sed Append の例 1. ファイルの 3 行目の後に行を追加します。
3 行目の後に「クールなガジェットとウェブサイト」という行を追加します。 sed “a” コマンドは一致の後に行を挿入します。
$ sed '3 a\ > Cool gadgets and websites' thegeekstuff.txt Linux Sysadmin Databases - Oracle, mySQL etc. Security (Firewall, Network, Online Security etc) Cool gadgets and websites Storage in Linux Productivity (Too many technologies to explore, not much time available) Windows- Sysadmin, reboot etc.
Sed Append の例 2. パターンに一致するすべての行の後に行を追加する
以下の sed コマンドは、パターン「Sysadmin」に一致するすべての行の後に「Linux Scripting」行を追加します。
$ sed '/Sysadmin/a \ > Linux Scripting' thegeekstuff.txt Linux Sysadmin Linux Scripting Databases - Oracle, mySQL etc. Security (Firewall, Network, Online Security etc) Storage in Linux Productivity (Too many technologies to explore, not much time available) Windows- Sysadmin, reboot etc. Linux Scripting
Sed Append の例 3. ファイルの最後に行を追加
次の例では、ファイルの最後に「Website Design」という行を追加します。
$ sed '$ a\ > Website Design' thegeekstuff.txt Linux Sysadmin Databases - Oracle, mySQL etc. Security (Firewall, Network, Online Security etc) Storage in Linux Productivity (Too many technologies to explore, not much time available) Windows- Sysadmin, reboot etc. Website Design
Sed コマンドを使用して行を挿入
Sed コマンド「i」は、範囲またはパターンを含むすべての行の前に行を挿入するために使用されます。
Syntax: #sed 'ADDRESS i\ Line which you want to insert' filename #sed '/PATTERN/ i\ Line which you want to insert' filename
Sed Insert 例 1. 行の 4 行目の前に行を追加します。
4 行目の前に「クールなガジェットとウェブサイト」という行を追加します。 「a」コマンドは一致の後に行を挿入しますが、「i」コマンドは一致の前に挿入します。
$ sed '4 i\ > Cool gadgets and websites' thegeekstuff.txt Linux Sysadmin Databases - Oracle, mySQL etc. Security (Firewall, Network, Online Security etc) Cool gadgets and websites Storage in Linux Productivity (Too many technologies to explore, not much time available) Windows- Sysadmin, reboot etc.
Sed Insert の例 2. パターンを含むすべての行の前に行を挿入します
以下の sed コマンドは、「Sysadmin」というパターンに一致するすべての行の前に「Linux Scripting」という行を追加します。
$ sed '/Sysadmin/i \ > Linux Scripting' thegeekstuff.txt Linux Scripting Linux Sysadmin Databases - Oracle, mySQL etc. Security (Firewall, Network, Online Security etc) Storage in Linux Productivity (Too many technologies to explore, not much time available) Linux Scripting Windows- Sysadmin, reboot etc.
Sed Insert の例 3. ファイルの最終行の前に行を挿入します。
ファイルの最後の行の前に「Website Design」という行を追加します。
$ sed '$ i\ > Website Design' thegeekstuff.txt Linux Sysadmin Databases - Oracle, mySQL etc. Security (Firewall, Network, Online Security etc) Storage in Linux Productivity (Too many technologies to explore, not much time available) Website Design Windows- Sysadmin, reboot etc.
Sed コマンドを使用して行を置換
sed の「c」コマンドは、パターンまたは範囲に一致するすべての行を新しい特定の行に置き換えるために使用されます。
Syntax: #sed 'ADDRESS c\ new line' filename #sed '/PATTERN/ c\ new line' filename
Sed Replace の例 1. ファイルの最初の行を置き換える
以下のコマンドは、ファイルの最初の行を「The Geek Stuff」に置き換えます。
$ sed '1 c\ > The Geek Stuff' thegeekstuff.txt The Geek Stuff Databases - Oracle, mySQL etc. Security (Firewall, Network, Online Security etc) Storage in Linux Productivity (Too many technologies to explore, not much time available) Windows- Sysadmin, reboot etc.
Sed Replace の例 2. パターンに一致する行を置換
「Linux Sysadmin」というパターンを持つすべての行を「Linux Sysadmin – Scripting」に置き換えます。
$ sed '/Linux Sysadmin/c \ > Linux Sysadmin - Scripting' thegeekstuff.txt Linux Sysadmin - Scripting Databases - Oracle, mySQL etc. Security (Firewall, Network, Online Security etc) Storage in Linux Productivity (Too many technologies to explore, not much time available) Windows- Sysadmin, reboot etc.
Sed Replace の例 3. ファイルの最後の行を置き換える
以下に示す sed コマンドは、ファイルの最後の行を「ファイルの最後の行」に置き換えます。
$ sed '$ c\ > Last line of the file' thegeekstuff.txt Linux Sysadmin Databases - Oracle, mySQL etc. Security (Firewall, Network, Online Security etc) Storage in Linux Productivity (Too many technologies to explore, not much time available) Last line of the file
Sed コマンドを使用して行番号を表示する
「=」は、現在の行番号を標準出力に出力する sed のコマンドです。
Syntax: #sed '=' filename
上記の send コマンド構文は、最初の行に行番号を出力し、次の行にファイルの元の行を出力します。
sed ‘=’ コマンドは 1 つのアドレスしか受け付けないため、行の範囲の行番号を出力したい場合は、中かっこを使用する必要があります。
Syntax: # sed -n '/PATTERN/,/PATTERN/ { = p }' filename
Sed 行番号の例 1. パターンを含む行番号を見つける
以下の sed コマンドは、パターン「データベース」に一致する行番号を出力します
$ sed -n '/Databases/=' thegeekstuff.txt 2
Sed 行番号の例 2. 行番号の印刷範囲
パターン「Oracle」から「Productivity」に一致する行の行番号を出力してください。
$ sed -n '/Oracle/,/Productivity/{ > = > p > }' thegeekstuff.txt 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)
Sed 行番号の例 3. ファイル内の合計行数を出力
ファイルの最終行の行番号がファイルの総行数になります。パターン $ は、ファイルの最終行を指定します。
$ sed -n '$=' thegeekstuff.txt 6