#!/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/'