#!/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;}'
これ:
- 5から最後まで行だけを選択して作業してください。コードは中括弧内にあります。
- 次に、含まれているセットからその行のみを選択し、代替コマンドを
MNO
使用してその行をs
置き換えます。DEF
ABC
他のすべての行は変更されずに印刷されます。
答え2
次のコマンドを試してください
sed –n '10,$p' file1|sed '/MNO/s/ABC/DEF/'