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

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

sed チュートリアルの最初の部分で、アドレスとパターンを使用してファイル行を印刷する方法を確認しましょう。

今後数週間で、いくつかの素晴らしい sed チュートリアルと例を投稿する予定です。

Unix Sed の紹介

  • sed は、「非対話型」のストリーム指向エディターです。 「非インタラクティブ」であるため、必要に応じて編集を自動化するために使用できます。
  • sed という名前はストリーム エディターの略語であり、ユーティリティはそのコマンドの多くを ed ライン エディターから派生させています (ed は最初の UNIX テキスト エディターでした)。
  • これにより、vi や emacs を開かなくても、複数のファイルを編集したり、一般的な編集操作を実行したりできます。
  • sed は、ファイルまたは標準入力から読み取り、標準出力に出力します。
  • sed には、パターン バッファとホールド バッファと呼ばれる 2 つのバッファがあります。どちらも最初は空です。

Unix Sed 作業方法論

これを 1 実行サイクルと呼びます。ファイル/入力の最後に到達するまでサイクルが続きます。

<オール>
  • stdin/file から行全体を読み取ります。
  • 末尾の改行を削除します。
  • 行をパターン バッファに配置します。
  • 提供されたコマンドに従ってパターン バッファを変更します。
  • パターン バッファを stdout に出力します。
  • Sed での印刷操作

    Linux Sed コマンドを使用すると、行番号またはパターン一致に基づいて特定の行のみを印刷できます。 「プ」 パターンバッファからデータを印刷するためのコマンドです。

    パターン空間の自動出力を抑制するには、sed で -n コマンドを使用します。 sed -n オプションは、明示的な印刷要求が見つからない限り、何も印刷しません。

    Syntax:
    # sed -n 'ADDRESS'p filename
    
    # sed -n '/PATTERN/p' filename

    最初に、以下で説明するすべての例で使用される 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.

    5 Sed ADDRESS 形式の例

    Sed アドレス形式 1:NUMBER

    これは、入力の N 行目のみに一致します。

    # sed -n ‘N’p filename

    たとえば、3p は入力ファイル thegeekstuff.txt の 3 行目を次のように出力します。

    # sed -n '3'p thegeekstuff.txt
    3. Hardware

    Sed アドレス形式 2:NUMBER1~NUMBER2

    M~N に「p」コマンドを指定すると、M 行目から N 行ごとに出力されます。

    # sed -n ‘M~N’p filename

    たとえば、3~2p は、以下に示すように、3 行目から 2 行ごとに印刷します。

    # sed -n '3~2'p thegeekstuff.txt
    3. Hardware
    5. Storage
    7. Productivity (Too many technologies to explore, not much time available)
    9. Software Development

    Sed アドレス形式 3:START,END

    M,N に「p」コマンドを指定すると、M 行目から N 行目に出力されます。

    # sed -n ‘M,N’p filename

    たとえば、4,8p は、入力ファイル thegeekstuff.txt の 4 行目から 8 行目までを出力します

    # sed -n '4,8'p thegeekstuff.txt
    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

    Sed アドレス形式 4:'$' 最終行

    $ と「p」コマンドは、入力の最後の行のみに一致します。

    # sed -n ‘$’p filename

    たとえば、$p は以下に示すように最後の行のみを出力します。

    # sed -n '$'p thegeekstuff.txt
    10.Windows- Sysadmin, reboot etc.

    Sed アドレス形式 5:NUMBER,$

    N,$ に「p」コマンドを指定すると、N 行目からファイルの末尾までが出力されます。

    # sed -n ‘N,$p’ filename

    たとえば、4,$p は 4 行目からファイルの最後までを出力します。

    # sed -n '4,$p' thegeekstuff.txt
    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.

    6 Sed PATTERN フォーマットの例

    Sed パターン フォーマット 1:PATTERN

    PATTERN は UNIX の正規表現である可能性があります。以下のコマンドは、指定されたパターンに一致する行のみを出力します。

    # sed -n /PATTERN/p filename

    たとえば、次の例では、パターン「Sysadmin」に一致する行のみが出力されます。

    # sed -n /Sysadmin/p thegeekstuff.txt
    1. Linux - Sysadmin, Scripting etc.
    10.Windows- Sysadmin, reboot etc.

    Sed パターン フォーマット 2:/PATTERN/,ADDRESS


    # sed -n ‘/PATTERN/,Np’ ファイル名

    たとえば、次の例では、パターンに一致する行を入力から N 番目の行に出力します。 3 行目はパターン「ハードウェア」に一致するため、3 行目から 6 行目までを印刷します。

    # sed -n '/Hardware/,6p' thegeekstuff.txt
    3. Hardware
    4. Security (Firewall, Network, Online Security etc)
    5. Storage
    6. Cool gadgets and websites

    Sed パターン フォーマット 3:ADDRESS,/PATTERN/

    入力の N 行目から、パターンに一致する行までを出力します。パターンが一致しない場合は、入力の最後まで出力します。

    # sed -n ‘N,/PATTERN/p’ filename

    たとえば、4 行目はパターン「セキュリティ」に一致するため、3 行目から 4 行目までを印刷します。

    # sed -n '3,/Security/p' thegeekstuff.txt
    3. Hardware
    4. Security (Firewall, Network, Online Security etc)

    Sed パターン形式 4:/PATTERN/,$

    指定されたパターンに一致する行からファイルの末尾までを出力します。

    # sed -n ‘/PATTERN/,$p’ filename

    # sed -n '/Website/,$p' thegeekstuff.txt
    8. Website Design
    9. Software Development
    10.Windows- Sysadmin, reboot etc.

    Sed パターン フォーマット 5:/PATTERN/,+N

    パターンに一致する行と、一致した行に続く次の N 行を出力します。

    # sed -n ‘/PATTERN/,+Np’ filename

    たとえば、以下は、パターン /Storage/ に一致する 5 行目と、/Storage/ に続く次の 2 行を出力します。

    # sed -n '/Storage/,+2p' thegeekstuff.txt
    5. Storage
    6. Cool gadgets and websites
    7. Productivity (Too many technologies to explore, not much time available)

    Sed パターン形式 6:/PATTERN/,/PATTERN/

    2 つの正規表現の間のファイルのセクション (一致した行を含む) を出力します。

    # sed -n ‘/P1/,/P2/p’ filename

    たとえば、5 行目は「ストレージ」に一致し、8 行目は「デザイン」に一致するため、5 ~ 8 行目が出力されます。

    # sed -n '/Storage/,/Design/p' thegeekstuff.txt
    5. Storage
    6. Cool gadgets and websites
    7. Productivity (Too many technologies to explore, not much time available)
    8. Website Design

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

    2. 同じ行の2つの検索パターン間で値を抽出しますか?

    3. 特定の文字列と次の行を含む行を削除しますか?

    1. UNIX/Linux でファイルの行数を数える方法

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

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

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

    2. sed を使用してファイルの 1 行目にテキストを挿入するにはどうすればよいですか?

    3. 行番号によって、あるファイルの行を別のファイルの行に置き換えます