sed를 사용하여 키워드를 찾는 경우 일부 줄을 수정하시겠습니까? [복사]

sed를 사용하여 키워드를 찾는 경우 일부 줄을 수정하시겠습니까? [복사]

특정 키워드가 발견되면 행을 수정하고 싶습니다.

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

sedMenon, 당신은 전체 파일을 조작하는 방법에 대한 답을 얻었습니다 . 코드 뼈대에 표시된 대로 개별 라인에서 작업하려는 의도라면 해당 프로그램 sed(또는 다른 외부 프로그램)이 필요하지 않습니다. 쉘이 아마도(아래 설명 참조) 대체 작업을 수행할 것이기 때문입니다. string코드의 변수에 값(예를 들어)이 포함되어 있다고 가정하면 PORT_NUM변수 대체는 line다음과 같은 방식으로 수행될 수 있습니다.

while read line
do
     if [[ $line =~ $string ]]; then
           line=${line/BILL_NO/NA}
     fi
done < "$file"

(참고: 이 대체품은 bash, ksh, zsh와 같은 최신 셸에 적용됩니다.)

관련 정보