11.指定されたファイル内の「MNO」という単語のみを含む行の終わりまで、5行目から始まり、「DEF」という単語をすべて「ABC」に置き換えます。

11.指定されたファイル内の「MNO」という単語のみを含む行の終わりまで、5行目から始まり、「DEF」という単語をすべて「ABC」に置き換えます。
#!/bin/sh

counter=5
string="MNO"
while [ $counter -gt 0 ]
do
        for item in /Users/kristinautas/Desktop/DEFABC.txt
        do
                if [[ $(gsed $counter DEFABC.txt)=*string* ]]; then
                        gsed -i "$counter s/DEF/ABC/g" "DEFABC.txt"
                        counter=$(($counter+1))
                fi
        done
done

「DEFABC.txt」ファイルの5行目から始まるすべての「DEF」文字列を「ABC」文字列に置き換えることができました。ただし、ifステートメントを使用して別の条件を追加しようとすると(行に "MNO"文字列が含まれている場合にのみ置き換える)、スクリプトはまだ行5以降のすべての項目を置き換えます。私は何が間違っていましたか?

ベストアンサー1

sedはこれを自分で行うことができます。

sed -e '5,${/MNO/s/DEF/ABC/g;}'

これ:

  1. 5から最後まで行だけを選択して作業してください。コードは中括弧内にあります。
  2. 次に、含まれているセットからその行のみを選択し、代替コマンドをMNO使用してその行をs置き換えます。DEFABC

他のすべての行は変更されずに印刷されます。

おすすめ記事