前の sed チュートリアルでは、Unix sed コマンドの基本と、sed アドレスとパターンを使用したファイルからの行の出力について説明しました.
この記事では、アドレスとパターンを使用してファイルから行を削除する方法を、8 つの素晴らしい例で確認しましょう。
- 「p」コマンドはバッファを出力します (「p」で -n オプションを使用することを忘れないでください)
- 「d」コマンドは正反対で、削除用です。 'd' パターン スペース バッファを削除し、すぐに次のサイクルを開始します。
Syntax: # sed 'ADDRESS'd filename # sed /PATTERN/d filename
-n オプションを除いて、出力に示されている ADDRESSES と PATTERNS の構文は削除にも適用されます。 (-n は、印刷パターン バッファを抑制するためだけに使用できます。「p」コマンドで使用できます)
最初に、以下で説明するすべての例で使用される geekstuff.txt ファイルを作成しましょう。
# cat thegeekstuff.txt 1. Linux - Sysadmin, Scripting etc. 2. Databases - Oracle, mySQL etc. 3. Hardware 4. Security (Firewall, Network, Online Security etc) 5. Storage 6. Cool gadgets and websites 7. Productivity (Too many technologies to explore, not much time available) 8. Website Design 9. Software Development 10.Windows- Sysadmin, reboot etc.
1. N 行目を削除
「Nd」は N 番目の行を削除し、他の行を出力します。
sed 'Nd' ファイル名
方法論として、
- 最初の行を読み取り、パターン バッファに配置します。
- 指定されたコマンドがこの行に対して true かどうかを確認します。true の場合、パターン スペース バッファーを削除し、次のサイクルを開始します。つまり、次の行を読む
- 指定されたコマンドが真でない場合、通常の動作として、パターン スペース バッファの内容を出力します。
たとえば、3d は 3 行目を削除し、以下に示すように他の行を出力します。
$ sed 3d thegeekstuff.txt 1. Linux - Sysadmin, Scripting etc. 2. Databases - Oracle, mySQL etc. 4. Security (Firewall, Network, Online Security etc) 5. Storage 6. Cool gadgets and websites 7. Productivity (Too many technologies to explore, not much time available) 8. Website Design 9. Software Development 10.Windows- Sysadmin, reboot etc.
2. 3 行目から 2 行ごとに削除
$ sed '3~2d' thegeekstuff.txt 1. Linux - Sysadmin, Scripting etc. 2. Databases - Oracle, mySQL etc. 4. Security (Firewall, Network, Online Security etc) 6. Cool gadgets and websites 8. Website Design 10.Windows- Sysadmin, reboot etc.
3.ファイルの 4 行目から 8 行目までを削除
$ sed '4,8d' thegeekstuff.txt 1. Linux - Sysadmin, Scripting etc. 2. Databases - Oracle, mySQL etc. 3. Hardware 9. Software Development 10.Windows- Sysadmin, reboot etc.
4.入力から最後の行を削除します。
$ sed '$d' thegeekstuff.txt 1. Linux - Sysadmin, Scripting etc. 2. Databases - Oracle, mySQL etc. 3. Hardware 4. Security (Firewall, Network, Online Security etc) 5. Storage 6. Cool gadgets and websites 7. Productivity (Too many technologies to explore, not much time available) 8. Website Design 9. Software Development
5.指定されたパターンに一致する行を入力から削除します。
たとえば、以下のコマンドは「Sysadmin」に一致する行を削除します。
$ sed /Sysadmin/d thegeekstuff.txt 2. Databases - Oracle, mySQL etc. 3. Hardware 4. Security (Firewall, Network, Online Security etc) 5. Storage 6. Cool gadgets and websites 7. Productivity (Too many technologies to explore, not much time available) 8. Website Design 9. Software Development
6.指定されたパターンに一致する行からファイルの末尾までを削除します。
$ sed '/Website/,$d' thegeekstuff.txt 1. Linux - Sysadmin, Scripting etc. 2. Databases - Oracle, mySQL etc. 3. Hardware 4. Security (Firewall, Network, Online Security etc) 5. Storage 6. Cool gadgets and websites 7. Productivity (Too many technologies to explore, not much time available)
7.指定されたパターンに一致する行とその次の 2 行を削除します。
$ sed '/Storage/,+2d' thegeekstuff.txt 1. Linux - Sysadmin, Scripting etc. 2. Databases - Oracle, mySQL etc. 3. Hardware 4. Security (Firewall, Network, Online Security etc) 8. Website Design 9. Software Development 10.Windows- Sysadmin, reboot etc.
8. sed を使用してファイルから空白行を削除する
sed を使用して空白行を削除することもできます。次の sed の例は、sed を使用して空白行を削除する方法を示しています。
$ sed '/^$/d' thegeekstuff.txt 1. Linux - Sysadmin, Scripting etc. 2. Databases - Oracle, mySQL etc. 3. Hardware 4. Security (Firewall, Network, Online Security etc) 5. Storage 6. Cool gadgets and websites 7. Productivity (Too many technologies to explore, not much time available) 8. Website Design 9. Software Development 10.Windows- Sysadmin, reboot etc.