シナリオは、シェルスクリプトで最後に表示された単語をコメントアウトしたいということですsed
。
temp.sh
以下があるとしましょう。
Abc 123 Abc
Sdf 2
Abc
Abc
Utyr
Qww
Abc
私は最後のインスタンス(行の先頭に発生)を次のように置き換えたいと思います。#Abc
結局のところ、結果は次のようになります。
Abc 123 Abc
Sdf 2
Abc
#Abc
Utyr
Qww
ベストアンサー1
ファイルを元に戻すには、最初のファイルをコメントアウトしてからファイルを元に戻します。
$ tac temp.sh | sed '0,/^Abc/{s/^Abc/#&/}' | tac
Abc 123 Abc
Sdf 2
Abc
#Abc
Utyr
Qww
これは、「行0から始まり、最初の行が一致するまで続行し、その行のみがこの/^Abc/
場合()に一致するものにAbc
置き換えられることを意味します。ありがとうございます。#
#
Abc
この回答。
これにはtac
GNUツールとGNU実装が必要ですsed
。
ソースファイルを変更するには、次のようにします。
tac temp.sh | sed '0,/^Abc/{s/^Abc/#&/}' | tac > temp1.sh &&
mv temp1.sh temp.sh
またはPerlでは:
$ tac temp.sh | perl -pe 'next if $k; $k++ if s/^Abc/#$&/ ' | tac
Abc 123 Abc
Sdf 2
Abc
#Abc
Utyr
Qww
ソースファイルを変更するには、次のようにします。
tac temp.sh | perl -pe 'next if $k; $k++ if s/^Abc/#$&/ ' | tac> temp1.sh &&
mv temp1.sh temp.sh
または使用ステファンの純粋なperl
アプローチまたは先行きれいなsed
人、両方とも-i
生ファイルを編集するために使用されます。