특정 키워드가 발견되면 행을 수정하고 싶습니다.
CS_CODE, SM_NUM, PORT_NUM, DEV_PORT_NUM, DIRNUM, MAIN_DIRNUM, BILL_NO, ADR_NAME
위 줄에서 "PORT_NUM"이 존재하는 경우 "BILL_NO"를 "NA"로 바꿔야 합니다. 줄에 있는 키워드만 바꿔야 합니다.
나는 다음 방법을 사용하고 있습니다 :
while IFS=$'\n' read -r line
do
if [[ $line == *"$string"* ]]; then
< sed command to replace only keyword >
fi
done < "$file"
이 목표를 어떻게 달성할 수 있나요?
참고: "-i" 확장자는 내 버전의 sed에서 작동하지 않습니다.
답변1
sed
Menon, 당신은 전체 파일을 조작하는 방법에 대한 답을 얻었습니다 . 코드 뼈대에 표시된 대로 개별 라인에서 작업하려는 의도라면 해당 프로그램 sed
(또는 다른 외부 프로그램)이 필요하지 않습니다. 쉘이 아마도(아래 설명 참조) 대체 작업을 수행할 것이기 때문입니다. string
코드의 변수에 값(예를 들어)이 포함되어 있다고 가정하면 PORT_NUM
변수 대체는 line
다음과 같은 방식으로 수행될 수 있습니다.
while read line
do
if [[ $line =~ $string ]]; then
line=${line/BILL_NO/NA}
fi
done < "$file"
(참고: 이 대체품은 bash, ksh, zsh와 같은 최신 셸에 적용됩니다.)