linux常備ツールのsed


sedはlinux上の一般的なコマンドで、stream editorという意味で、入力やファイルの内容を処理するために使用されます.元の内容を変更するのではなく、処理後の結果をstdoutに出力します.
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を含む行を削除し、残りのすべての行を出力します.