SED学習03

1. 複数行のテキストを処理するために使用できる 3 つのコマンド

N: データ ストリーム内の次の行を結合し、処理用の複数行グループを作成します。
D: 複数行グループ内の行を削除します。
· P: 複数行グループ内の行を印刷します。

2. 例

2.1 例 1

$ cat -n data1.txt 
     1	Header Line
     2	
     3	Data Line #1
     4	
     5	End of Data Lines

2.11 空行2、3を削除する方法

$ sed '/^$/d' data1.txt

2.12 空行のみを削除する方法2

$ sed '/Header/{n ; d}' data1.txt

2.2 例 2 テキスト行を結合する

$ cat -n data2.txt 
     1	Header Line
     2	First Data Line
     3	Second Data Line
     4	End of Data Lines
$ sed '/First/{ N ; s/\n/ / }' data2.txt 
Header Line 
First Data Line Second Data Line 
End of Data Lines 

これは、データ ファイル内で 2 行にまたがるテキスト フレーズを検索する場合に便利な方法です。以下に例を示します。

$ cat -n data3.txt 
     1	On Tuesday, the Linux System
     2	Admin group meeting will be held.
     3	All System Admins should attend.
     4	Thank you for your cooperation.
$ sed 'N ; s/System.Admin/DevOps Engineer/' data3.txt
On Tuesday, the Linux DevOps Engineer group meeting will be held.
All DevOps Engineers should attend.
Thank you for your cooperation.
$

N コマンドを使用して、最初の単語が含まれる行と次の行をマージします。フレーズ内に改行が含まれている場合でも、フレーズは検索できます。replace コマンドでは、System と Admin の間にドット パターン (.) を使用して、スペースと改行の両方に一致することに注意してください。
ただし、ドットが改行と一致する場合、改行を削除すると 2 つの行が 1 つにマージされます。これはあなたが望む結果ではないかもしれません。
この問題を解決するには、sed エディター スクリプトで 2 つの置換コマンドを使用できます。1 つはフレーズが複数行に出現する場合を処理し、もう 1 つはフレーズが 1 行に出現する場合を処理します。

$ sed 'N
> s/System\nAdmin/DevOps\nEngineer/
> s/System Admin/DevOps Engineer/
> ' data3.txt
On Tuesday, the Linux DevOps
Engineer group meeting will be held.
All DevOps Engineers should attend.
Thank you for your cooperation.
$

最初の replace コマンドは、2 つの単語間の改行を特に検索し、置換文字列に配置します。これにより、新しいテキストと同じ位置に改行が追加されます。しかし、目に見えない問題がまだ残っています。スクリプトは常に、sed エディター コマンドを実行する前に、パターン スペースにテキストの次の行を読み取ります。テキストの最後の行に達すると、読み取る次の行がなく、N コマンドによって sed エディターが停止されます。一致するテキストが最後の行にある場合、コマンドは一致するデータを見つけることができません。

$ cat data4.txt
On Tuesday, the Linux System
Admin group meeting will be held.
All System Admins should attend.
$
$ sed 'N
> s/System\nAdmin/DevOps\nEngineer/
> s/System Admin/DevOps Engineer/
> ' data4.txt
On Tuesday, the Linux DevOps
Engineer group meeting will be held.
All System Admins should attend.
$

システム管理テキストはデータ ストリームの最後の行に表示されますが、この行とマージするためにパターン スペースに読み込む行が他にないため、N コマンドはこれを見逃します。この問題を解決するのは難しいことではありません。次のように、単一行編集コマンドを N コマンドの前に置き、複数行編集コマンドを N コマンドの後に置きます。

$ sed '
> s/System Admin/DevOps Engineer/
> N
> s/System\nAdmin/DevOps\nEngineer/
> ' data4.txt
On Tuesday, the Linux DevOps
Engineer group meeting will be held.
All DevOps Engineers should attend.
$

レベル 3 の見出し

レベル 4 の見出し

レベル 5 の見出し
第6レベルの称号

Guess you like

Origin blog.csdn.net/weixin_44231554/article/details/130345101
sed