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

Unix Sed チュートリアル:アドレスとパターンを使用してファイル行を削除する

前の 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.

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

  2. 2つのパターン間の(および除外する)行を印刷しますか?

  3. 2つのパターンの間(およびそれを含む)の線を印刷しますか?

  1. Sedを使用してテキストファイルから複数のランダム行を削除する方法は?

  2. シェルコマンドを使用してASCIIファイルの最初のN行を削除するにはどうすればよいですか?

  3. ファイルの途中で特定の行を表示するためのクイックunixコマンド?

  1. unix - ファイルの先頭と末尾

  2. bashを使用して、ファイルの各行の先頭にある空白を削除します

  3. sed を使用して空行を削除する