一緒にsedを学ぶ(2)

まず、演習のテキストexample.txtを見てください。

$ cat example.txt 
This is a test file.
It is the last day of 2018.
Hope all you success!
HAPPY NEW YEAR!

一緒にsedを学ぶ(2)

-e:複数のコマンドを実行します

通常、sedの後に続くコマンドは1つだけです。もちろん、あなたがパイプ記号を使用することができます「|」複数のコマンドを実行するために例えば、私は交換したい。 『『2019 『と』第一『と』 2018』と』最後の
パイプ記号を使用しました:

sed "s/last/first/g" example.txt | sed "s/2018/2019/g"

最初のsedの標準出力は、2番目のsedの標準入力として機能します。
もちろん、より簡潔な方法は-eパラメーターを使用することです。sedは複数のコマンドを実行できます。

sed -e "s/last/first/g" -e "s/2018/2019/g" example.txt
# This is a test file.
# It is the first day of 2019.
# Hope all you success!
# HAPPY NEW YEAR!

一緒にsedを学ぶ(2)

-f:sedスクリプトファイルを宣言します

新しいテキストファイルexample.sedを作成し、テキストを入力します。

s/last/first/g
s/2018/2019/g

ファイルに引用符は必要ないことに注意してください。その後、コマンドラインでファイルを実行します。

sed -f example.sed example.txt
# This is a test file.
# It is the first day of 2019.
# Hope all you success!
# HAPPY NEW YEAR!

スクリプトファイルからコマンドを書き込むことは、コマンドが多数あるか、頻繁に使用される状況に適しています。

一緒にsedを学ぶ(2)

ステートメント行

行番号を使用して行を宣言する

sの直前に行番号を追加して、実行する行をsedに指示します。
たとえば、2行目のisをwasに置き換えます。

sed '2s/is/was/g' example.txt
# This is a test file.
# It was the last day of 2018.
# Hope all you success!
# HAPPY NEW YEAR!
如果要声明范围,可以使用逗号“,”将行号分割开。比如将example.txt的第2-4的大写字母全部改成小写。

sed '2,4s/[A-Z]/\L&/g' example.txt
# This is a test file.
# it is the last day of 2018.
# hope all you success!
# happy new year!

正規式で行を宣言
することで、行番号で操作する行を指定するだけでなく、正規式で操作する行を除外することもできます。通常の式はスラッシュ内に配置する必要があることに注意してください。
たとえば、感嘆符(!)で終わる行を除外し、これらの行のすべての大文字を小文字に変換したいとします。

sed '/!$/s/[A-Z]/\L&/g' example.txt
# This is a test file.
# It is the last day of 2018.
# hope all you success!
# happy new year!

ここで、「!$」は、感嘆符で終わる行を意味します。
行範囲を数値で宣言するのと同じように、通常の式で行範囲を宣言することもできます。たとえば、最後から2番目の文字が数字[0-9]である間の行のすべての大文字を、最後から2番目の文字が感嘆符であるように変更したいとします。

sed '/[0-9].$/,/!$/s/[A-Z]/\L&/g' example.txt
# This is a test file.
# it is the last day of 2018.
# hope all you success!
# HAPPY NEW YEAR!

通常の式と組み合わせると、sedは非常に複雑な操作を完了できることがわかります。

一緒にsedを学ぶ(2)

d:行を削除します

sパラメータは主に検索と置換機能を完了し、dパラメータは行を削除できます。
たとえば、行1〜3を削除します。

sed '1,3d' example.txt 
# HAPPY NEW YEAR!

1行目と3行目を削除する場合は、2つのコマンドをセミコロン「;」で分割できます。

sed '1d;3d' example.txt 
# It is the last day of 2018.
# HAPPY NEW YEAR!

もちろん、通常の式で削除する行を指定することもできるので、例を挙げません。

一緒にsedを学ぶ(2)

p:出力ライン

これは以前に導入されたものであり、特定の行を出力するために「-n」とともに使用されることがよくあります。たとえば、大きなファイルの
9999を表示したい場合は、-n '9999p'filenameをsedできます。

沿って!逆選択の
場合、正規表現の「!」は「いいえ」を意味する可能性があるため、example.txtで数字を含まない行を選択する場合は次のようになります。

sed -n '/[0-9]/!p' example.txt 
# This is a test file.
# Hope all you success!
# HAPPY NEW YEAR!

一緒にsedを学ぶ(2)

d、p、および!を要約します。

パラメータdは削除に使用され、パラメータpは出力に使用されます。これはkeepと同等であり、パラメータ!は逆選択を意味します。したがって、同じ目的は、それらの異なる組み合わせによって達成できます。以下は、これら3つのパラメーターの異なる組み合わせの例です。

一緒にsedを学ぶ(2)

100回の読書は1回の練習よりも優れています

=====終わり====

参考資料:http//www.grymoire.com/Unix/Sed.html#uh-30
一緒にsedを学ぶ(2)

おすすめ

転載: blog.51cto.com/15069450/2577357