#!/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
ubstitution 命令替换DEF
这些ABC
行。
所有其他行打印不变。
答案2
尝试以下命令
sed –n '10,$p' file1|sed '/MNO/s/ABC/DEF/'