参考記事:「シェルプログラミング – Sed」
cat /etc/redhat-release
でオペレーティングシステムがCentOS Linux release 7.6.1810
、uname -r
カーネルのバージョンが3.10.0-957.el7.x86_64
、バージョンが であることbash --version
がわかります。bash
4.2.46(2)
echo 'a : 1 : good ::::' >> sedplustest.txt
echo 'b : 2 : well ::::' >> sedplustest.txt
echo 'c : 3 : food ::::' >> sedplustest.txt
echo 'd : 4 : hood ::::' >> sedplustest.txt
echo 'e : 5 : bell ::::' >> sedplustest.txt
echo 'o : 6 : toll ::::' >> sedplustest.txt
上記のコマンドを使用して、次の内容を入力します。
a : 1 : good ::::
b : 2 : well ::::
c : 3 : food ::::
d : 4 : hood ::::
e : 5 : bell ::::
o : 6 : toll ::::
に書き込みsedplustest.txt
、ファイルの内容cat sedplustest.txt
を確認します。sedplustest.txt
グローバルな代替品
sed
デフォルトでは、パターン空間内で初めて一致した文字列のみが処理されます。sed 's/:/!/' sedplustest.txt
各行の最初の部分のみが:
に置き換えられ!
、各行の 2 番目の部分は:
変更されないことがわかります。実行sed 's/:/!/' sedplustest.txt
後もsedplustest.txt
変化しません。ファイルの内容は変更されませんが、
sed 's/:/!/g' sedplustest.txt
各行のすべてが に:
置き換えられます。!
sedplustest.txt
フラグビット
sed s/oldstring/newstring/标志位
、フラグは次のようになります。
一致と置換の数を示す数値。
g
上記のグローバル置換の効果と同様に
p
、
sed -n 'command' [FILE]... を印刷すると、印刷が抑制され
w file
、パターン スペースの内容が に出力されますfile
。
番号
sed 's/:/!/2' sedplustest.txt
各行2
の最初の一致を に:
変更できます!
。
sed 's/:/!/6' sedplustest.txt
各行6
の最初の一致を に:
変更できます!
。
印刷する
sed 's/a/!/p' sedplustest.txt
内容に応じた行が繰り返し印刷されます。
sed 's/a/!/' sedplustest.txt
内容の一致・不一致に関わらず各行が出力されます。sed -n 's/a/!/' sedplustest.txt
内容が一致するかどうかにかかわらず、行は出力されません。sed -n 's/a/!/p' sedplustest.txt
一致するコンテンツの行を出力します。コマンドはオプションと組み合わせて使用するのがp
最適です。-n
パターンスペースコンテンツ出力ファイル
sed -n 's/a/!/w record.txt' sedplustest.txt
最初に一致したコンテンツを にa
置き換え!
て出力しますrecord.txt
。
sed -n 's/a/!/pw testpw.txt' sedplustest.txt
最初に一致したコンテンツを にa
置き換えて!
、画面とtestpw.txt
ファイルに出力します。
sed -n 's/:/!/gpw testgpw.txt' sedplustest.txt
に一致する各行の内容をすべて:
置き換えて!
、画面とtestgpw.txt
ファイルに出力します。
アドレッシング
アドレス指定形式には次の形式があります。
/正则表达式/s/oldstring/newstring/标志位
行号s/oldstring/newstring/标志位
、行番号と正規表現を組み合わせて使用して$
、最後の行を示すことができます。
/正規表現/s/oldstring/newstring/flag
sed '/^e/s/:/!/' sedplustest.txt
で始まる行と一致し、すでにe
一致している行の最初の一致を に:
変更できます!
。
行番号 s/oldstring/newstring/flag
sed '3s/:/!/' sedplustest.txt
最初に 3 行目を一致させてから、すでに一致している行の最初の一致を:
に変更できます!
。
行番号と正規表現の混在
sed '/^e/,6s/:/!/' sedplustest.txt
e
で始まる行を最初の行に一致させ、すでに6
一致した行の最初の一致を に:
変更します!
。
グループ
これは、正規表現に一致した後に複数のコマンドを実行することです。たとえば、 です/正则表达式/{s/oldstring/newstring/标志位;s/oldstring/newstring/标志位
。
sed -n '/^e/{s/:/!/;s/e/a/2p}' sedplustest.txt
で始まる行と一致し、e
最初の一致を に:
変更し、次に!
2 番目の一致を にe
変更できますa
。
sed スクリプト ファイル
echo '3s/:/!/' > sfile.sed
3s/:/!/
に書き込んでsfile.sed
コマンド操作としてsed -f sfile.sed sedplustest.txt
使用した内容を使用し、 3 行目の最初に一致した部分を に置き換えます。sfile.sed
sedplustest.txt
:
!
この記事は8月8日目の学習ノートで、内容はGeek Timeの「Linux実践スキル100講座」から引用しています。