linux常備ツールのsed
2381 ワード
sedはlinux上の一般的なコマンドで、stream editorという意味で、入力やファイルの内容を処理するために使用されます.元の内容を変更するのではなく、処理後の結果をstdoutに出力します.
sedは極めて強力な命令で、それを完全に紹介するには本を書く必要があります.私も個人的によく使う使い方をいくつか紹介するしかありません.
sedコマンドを使用して置換を検索
これは私が最も多く使っているシーンで、使い方は:
sed ‘s/find/replace/’
次に例を挙げます.
現在のディレクトリの下にc.txtというファイルがあるとします.内容は次のとおりです.
中のtestをTESTに変更したいのですが、使い方は以下の通りです.
このうち,3つの’/'の中間は2つの正規表現であるため,正規表現と組み合わせると処理能力が強い.
prodを同時にPREDに変更したい場合は、その上でsedをもう一度使用できます.
ローカルファイルの内容は変更されず、変更された内容を出力します.
置換の検索については、デフォルトでは行ごとに1回しか置換されません.次の例では、小文字の
すべての小文字
sedを使用して特定の行を選択
sedには、行番号と割当額の正規表現に従って特定の行を選択する2つの方法があります.
sed-n‘3,5 p’file#出力3行目から5行目sed-n/regex/p’file#出力内容がregexの行に一致する
具体例を見てみましょう
ファイルc.txtが出力された3行目から5行目
sedを使用して行を削除する
このような使い方は、行を選択するのと似ています.あるいは、行を選択するのとは正反対です.
sed'3,5 d'file#出力3行目から5行目sed/regex/d'file#出力内容がregexの行に一致する
具体例を見てみましょう
上は3行目から5行目を削除し、残りのすべての行を出力します.
上のコマンドは
sedは極めて強力な命令で、それを完全に紹介するには本を書く必要があります.私も個人的によく使う使い方をいくつか紹介するしかありません.
sedコマンドを使用して置換を検索
これは私が最も多く使っているシーンで、使い方は:
sed ‘s/find/replace/’
次に例を挙げます.
現在のディレクトリの下にc.txtというファイルがあるとします.内容は次のとおりです.
jobcenter-test-1
jobcenter-test-2
jobcenter-test-3
jobcenter-prod-1
jobcenter-prod-2
jobcenter-prod-3
中のtestをTESTに変更したいのですが、使い方は以下の通りです.
$ sed 's/test/TEST/' c.txt
jobcenter-TEST-1
jobcenter-TEST-2
jobcenter-TEST-3
jobcenter-prod-1
jobcenter-prod-2
jobcenter-prod-3
このうち,3つの’/'の中間は2つの正規表現であるため,正規表現と組み合わせると処理能力が強い.
prodを同時にPREDに変更したい場合は、その上でsedをもう一度使用できます.
$ sed 's/test/TEST/' c.txt |sed 's/prod/PROD/'
jobcenter-TEST-1
jobcenter-TEST-2
jobcenter-TEST-3
jobcenter-PROD-1
jobcenter-PROD-2
jobcenter-PROD-3
ローカルファイルの内容は変更されず、変更された内容を出力します.
置換の検索については、デフォルトでは行ごとに1回しか置換されません.次の例では、小文字の
e
を大文字のE
に置き換えたいのですが、行ごとに1回しか有効になりません.$ sed 's/e/E/' c.txt
jobcEnter-test-1
jobcEnter-test-2
jobcEnter-test-3
jobcEnter-prod-1
jobcEnter-prod-2
jobcEnter-prod-3
すべての小文字
e
を置き換えたい場合は、最後の/
の後ろにg
を付ける必要があります.$ sed 's/e/E/g' c.txt
jobcEntEr-tEst-1
jobcEntEr-tEst-2
jobcEntEr-tEst-3
jobcEntEr-prod-1
jobcEntEr-prod-2
jobcEntEr-prod-3
sedを使用して特定の行を選択
sedには、行番号と割当額の正規表現に従って特定の行を選択する2つの方法があります.
sed-n‘3,5 p’file#出力3行目から5行目sed-n/regex/p’file#出力内容がregexの行に一致する
具体例を見てみましょう
$ sed -n '3,5p' c.txt
jobcenter-test-3
jobcenter-prod-1
jobcenter-prod-2
ファイルc.txtが出力された3行目から5行目
$ sed -n '/test/p' c.txt
jobcenter-test-1
jobcenter-test-2
jobcenter-test-3
test
に一致するすべての行が出力されますsedを使用して行を削除する
このような使い方は、行を選択するのと似ています.あるいは、行を選択するのとは正反対です.
sed'3,5 d'file#出力3行目から5行目sed/regex/d'file#出力内容がregexの行に一致する
具体例を見てみましょう
$ sed '3,5d' c.txt
jobcenter-test-1
jobcenter-test-2
jobcenter-prod-3
上は3行目から5行目を削除し、残りのすべての行を出力します.
$ sed '/test/d' c.txt
jobcenter-prod-1
jobcenter-prod-2
jobcenter-prod-3
上のコマンドは
test
を含む行を削除し、残りのすべての行を出力します.