Linuxのsedコマンド

sed コマンドの基本的な形式は次のとおりです。

[root@localhost ~]# sed [オプション] [スクリプトコマンド] ファイル名

sed コマンドの一般的なオプションと意味:

-e: コマンド ライン モードで sed アクションを直接編集します。これがデフォルト オプションです。

-f: sed アクションをファイルに書き込みます。-f filename を使用して、ファイル名で sed アクションを実行します。

-i: ファイルの内容を直接変更します。

-n : デフォルトでは、sed は指定されたすべてのスクリプトが実行された後、処理されたコンテンツを自動的に出力します。このオプションは起動時の出力をブロックするため、出力を完了するには print コマンドを使用する必要があります。

-r: 拡張式のサポート、

-h または –help: ヘルプの表示、

-V または –version: バージョン情報の表示。

sed の共通コマンド

a\ 現在の行の下にテキストを挿入;

i\ 現在の行の上にテキストを挿入;

c\ 選択した行を新しいテキストに変更;

d 削除、選択した行を削除;

D テンプレート ブロックの最初の行を削除;

s replace文字;

h はテンプレート ブロックの内容をメモリ内のバッファにコピーします;

H はテンプレート ブロックの内容をメモリ内のバッファに追加します;

g はメモリ バッファの内容を取得し、現在のテンプレート ブロック内のテキストを置き換えます;

G は取得します領域のメモリ バッファーの内容を現在のテンプレート ブロックのテキストに追加します;

l は印刷不可能な文字のリストをリストします;

n は次の入力行を読み取り、最初のコマンドではなく次のコマンドで新しい行を処理します;

N は追加しますthe next テンプレート ブロックの後に行を入力し、間に新しい行を埋め込み、現在の行番号を変更します。

p テンプレート ブロックの行を出力します。P (大文字) テンプレート ブロックの最初の行を出力;

q Sed を終了;

b ラベル付きでスクリプトに分岐、または分岐が存在しない場合はスクリプトの終了;

r ファイルからファイルから行を読み取る;

t 分岐の場合はラベル、最後の行から開始、条件が満たされるか、T、t コマンドを実行すると、ラベル付きのコマンドまたはスクリプトの最後に分岐します。T

ラベル エラー分岐は、エラーが発生すると最後の行から開始します。または T , t コマンドは、ラベル付きのコマンドまたはスクリプトの末尾への分岐を引き起こします。w

ファイルは、テンプレート ブロックをファイルの末尾に書き込み、追加します。W ファイルは、

テンプレート ブロックの最初の行を書き込み、次の行に追加します。ファイルの終わり; !

は次のコマンドを示します すべての選択されていない行に作用します;

= 現在の行番号を出力します。

# コメントを次の改行まで拡張します。

sed 置換コマンド

g はインライン完全置換を意味します;

p は印刷行を

意味します; w はファイルに行を

書き込むことを意味します; x はテンプレートブロック内のテキストとバッファ内のテキストを交換することを意味します;

y はある文字を別の文字に変換することを意味します (ただし正規表現では使用されません); \1 部分文字列一致するトークン;

& 一致する文字列トークン;

sed メタキャラクタ セット

^ は、次のように行の先頭に一致します: /^sed/ は、sed で始まるすべての行に一致します;

$ は、次のように行の末尾に一致します: /sed$/ は、sed で終わるすべての行に一致します; .

である任意の文字に一致します。 /sd/ のような改行ではありません。 /sd/ は、s の後に任意の文字が続き、最後に d に一致します。


* 0 個以上の文字と一致します。例: /*sed/ は、1 つ以上のスペースとその後に sed 行が続くすべてのテンプレートと一致します; [] は、指定された

範囲内の文字と一致します (/[sS]ed/ は sed および Sed と一致します)。

[^] は、次のような指定範囲内にない文字に一致します。 /[^A-RT-Z]ed/ は、文字の先頭に AR と TZ が含まれず、その後に ed が続く行に一致します。 \ (…\

) 部分文字列と一致し、一致する文字を保存します (s/\(love)able/\1rs など)。loveable は恋人に置き換えられます。 & 検索文字を保存して、他の文字を置き換えます (

s/love/** など)。 &**/, love これは **love** になります。

\< は、次のような単語の先頭に一致します。 /<

\> は、/love などの単語の末尾に一致します。>/ は、単語の末尾を含む行に一致します。愛を込めて;

x\{m\} は文字 x を m 回繰り返します。たとえば、 /0\{5\}/ は 5 つの 0 を含む行と一致します。x\{m,\} は文字 x を少なくとも m 回繰り返します

。 as: /0\{5,\}/ は少なくとも一致します 0 が 5 行あります;

x\{m,n\} 文字 x を少なくとも m 回、最大で n 回繰り返します。例: /0 \{5,10\}/ は 5 ~ 10 行の 0 と一致します。

sedコマンドインスタンス

置換操作:sコマンド

テキスト内の文字列を置換します。

 sed 's/book/books/' file  

すべてのブックをブックに置き換えて、ファイル全体を出力します。ただし、置換の結果はファイルに書き込まれないことに注意してください。

-n オプションは p コマンドとともに使用され、置換された行のみを出力し、ファイルへの書き込みも行いません。

 sed -n 's/test/TEST/p' file

ファイル オプション -i を直接編集します。これにより、ファイル内の各行の最初の book が照合され、books に置き換えられ、ファイルに書き込まれます。

 sed -i 's/book/books/' file 

フルリプレイスメントマークg

接尾辞 /g フラグを使用すると、各行の一致するすべてが置き換えられます。

 sed 's/book/books/g' file  #同样由于没加 -i 所以只是将替换后的整个文件输出,但是并没有将替换结果写入文件

同様に、-n オプションを追加して p コマンドと一緒に使用すると、置換された行のみを出力し、ファイルには書き込まないようにすることもできます。

sed -n 's/book/books/gp' file

ファイルに書き込んで -i を追加する必要があります

 sed -i 's/book/books/g' file 

N 番目の一致から置換する必要がある場合は、/Ng を使用できます。

 echo sksksksksksk | sed 's/sk/SK/2g' 
 skSKSKSKSKSK
 echo sksksksksksk | sed 's/sk/SK/3g'
 skskSKSKSKSK  
 echo sksksksksksk | sed 's/sk/SK/4g'
 skskskSKSKSK 

デリミタ

上記のコマンドの文字 / は sed の区切り文字として使用されており、任意の区切り文字も使用できます。

 sed ‘s:test:TEXT:g' 
 sed 's|test|TEXT|g' 

区切り文字がスタイル内に表示される場合は、エスケープする必要があります。
たとえば、以下の /bin を /usr/local/bin に置き換えます。

 sed 's/\/bin/\/usr\/local\/bin/g'

削除操作:dコマンド

空白行を削除します。

 sed '/^$/d' file

ファイルの 2 行目を削除します。

 sed '2d' file

ファイルの 2 行目から最後までのすべての行を削除します。

 sed '2,$d' file

ファイルの最後の行を削除します。

 sed '$d' file

ファイル内の test で始まるすべての行を削除します。

 sed '/^test/'d file

同様に、上記は変更結果を出力するだけで、ファイルを直接変更するわけではありませんが、-i を追加するとファイルを直接変更できます。

一致した文字列トークン &

正規表現 \w\+ はすべての単語に一致し、それを [&] に置き換えます。ここで、& は以前に一致した単語に対応します。

 echo this is a test line | sed 's/\w\+/[&]/g'
 [this] [is] [a] [test] [line] 
 echo this is a test line | sed 's/\w\+/[1]/g'
 [1] [1] [1] [1] [1] 

192.168.0.1 で始まるすべての行は、それ自体と localhost に置き換えられます。

 sed 's/^192.168.0.1/&localhost/' file 192.168.0.1localhost

部分文字列一致マーカー - \1

指定されたパターンの一部と一致します。

 echo this is digit 7 in a number | sed 's/digit [0-9]/nb/' 
 this is nb in a number

コマンド内の数字 7 を nb に置き換えます。数字の後の0~9の数字の部分をnbに置き換えることです。

 echo this is digit 7 in a number | sed 's/digit \([0-9]\)/\1/' 
 this is 7 in a number

コマンド内の数字 7 は 7 に置き換えられます。パターンに一致する部分文字列は 7 で、(…) は部分文字列の一致に使用され、最初に一致した部分文字列は \1 としてマークされ、以下同様に、2 番目に一致した結果は \2 になります。次に例を示します。

 echo abc BCD | sed 's/\([a-z]\+\) \([A-Z]\+\)/\2 \1/' 
 BCD abc

love は 1 とマークされ、すべての loveable が恋人たちに置き換えられ、出力されます。

 sed -n 's/\(love\)able/\1rs/p' file

複数の式を組み合わせる

sed '式' | sed '式' 同等:
sed '式; 式'

引用

Sed 式は一重引用符を使用して引用できますが、式の内部に変数文字列が含まれる場合は二重引用符を使用する必要があります。

 test=hello 
 echo hello WORLD | sed "s/$test/HELLO" 
 HELLO WORLD

選択した行の範囲: , (カンマ)

テストとチェックによって決定された範囲内のすべての行が印刷されます。
最初のテストが配置されている行から最後のチェックが配置されている行まで、および 2 つの間の範囲内のすべての行が印刷されます。

 sed -n '/test/,/check/p' file

5 行目から test を含む最初の行までのすべての行を出力します。

 sed -n '5,/^test/p' file

テンプレート test とwest の間の行では、各行の末尾が文字列 aaa bbb に置き換えられます。

 sed '/test/,/west/s/$/aaa bbb/' file

多点編集:eコマンド

-e オプションを使用すると、複数のコマンドを同じ行で実行できます。

 sed -e '1,5d' -e 's/test/check/' file

上記の sed 式の最初のコマンドは 1 行目から 5 行目を削除し、2 番目のコマンドは test を check に置き換えます。コマンドの実行順序は結果に影響します。両方のコマンドが置換コマンドである場合、最初の置換コマンドは 2 番目の置換コマンドの結果に影響します。

-e に相当するコマンドは --expression です。

 sed --expression='s/test/check/' --expression='/love/d' file

ファイルから読み取る: r コマンド

ファイル file の内容は、行一致テストの後に読み取られて表示されます。複数の行が一致した場合、ファイルの内容は、一致する各行の下に 1 回表示されます。

 sed '/test/r file' filename

ファイルに書き込む: w コマンド

この例では、test を含むすべての行がファイルに書き込まれますが、ファイル内の元のコンテンツは削除されます。

 sed -n '/test/w file' example

追加 (行の下): a\command

これは test で始まる行に test 行を追加します。

 sed '/^test/a\this is a test line' file

これは、test.conf ファイルの 2 行目の後にテスト行を挿入します。

 sed -i '2a\this is a test line' test.conf 

挿入 (オンライン):

i\ コマンドは、test で始まる行に this is test 行を追加します。

 sed '/^test/i\this is a test line' file

これは、test.conf ファイルの 5 行目の前にテスト行を挿入します。

 sed -i '5i\this is a test line' test.conf

次へ: n コマンド

test が一致した場合は、一致した行の次の行に移動し、この行の aa を bb に置き換え、その行を出力して続行します。

 sed '/test/{ n; s/aa/bb/; }' file 

変換: y コマンド

1 行目から 10 行目までのすべての abcde を大文字に変換します。正規表現メタキャラクタではこのコマンドを使用できないことに注意してください。

 sed '1,10y/abcde/ABCDE/' file

終了: q コマンド

行 10 を出力した後、sed を終了します。 sed '10q' filehold と get: h コマンドおよび G コマンド sed がファイルを処理するとき、行が削除されたり出力が抑制されない限り、各行はパターン スペースと呼ばれる一時バッファーに保存されます。それ以外の場合は、処理されたすべての行が画面に出力されます。その後、パターン スペースがクリアされ、処理のために新しい行が保存されます。

 sed -e '/test/h' -e '$G' file 

この例では、ライン マッチング テストが見つかった後、それがパターン スペースに保存され、h コマンドによってそれがコピーされ、ホールド バッファーと呼ばれる特別なバッファーに保存されます。2 番目のステートメントは、最後の行に到達すると、G コマンドがバッファーに保持されていた行をフェッチし、それをパターン空間に戻し、現在パターン空間にある行の末尾に追加することを意味します。この場合、最後の行に追加されます。簡単に言うと、test を含む行がコピーされ、ファイルの末尾に追加されます。

ホールドアンドスワップ: h コマンドと x コマンド

パターンスペースを交換し、バッファーの内容を保持します。つまり、test と check を含む行を交換します。

 sed -e '/test/h' -e '/check/x' file 

脚本scriptfile

sed スクリプトは、スクリプト ファイル名をブートする -f オプションを使用して Sed を起動する sed コマンドのリストです。Sed は、スクリプトに入力されるコマンドについて非常に厳しいものです。コマンドの最後に空白やテキストがあってはなりません。1 行に複数のコマンドがある場合は、セミコロンで区切る必要があります。# で始まる動作はコメント行であり、複数行にまたがることはできません。

 sed [options] -f scriptfile file(s)

奇数行または偶数行を印刷する

方法 1:

 sed -n 'p;n' test.txt  #奇数行 
 sed -n 'n;p' test.txt  #偶数行 

方法 2:

 sed -n '1~2p' test.txt  #奇数行 
 sed -n '2~2p' test.txt  #偶数行 

一致する文字列の次の行を出力します

 grep -A 1 SCC URFILE 
 sed -n '/SCC/{n;p}' URFILE 
 awk '/SCC/{getline; print}' URFILE

おすすめ

転載: blog.csdn.net/adaizzz/article/details/130098347