ファイルに表示される最後の単語を置き換える

ファイルに表示される最後の単語を置き換える

シナリオは、シェルスクリプトで最後に表示された単語をコメントアウトしたいということです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この回答

これにはtacGNUツールと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生ファイルを編集するために使用されます。

おすすめ記事