Modificar parte da linha se a palavra-chave for encontrada usando sed? [duplicado]

0

Eu quero modificar uma linha se uma palavra-chave específica for encontrada em uma linha.

CS_CODE, SM_NUM, PORT_NUM, DEV_PORT_NUM, DIRNUM, MAIN_DIRNUM, BILL_NO, ADR_NAME

Na linha acima, se 'PORT_NUM' estiver presente, então 'BILL_NO' deve ser substituído por 'NA'. Apenas a palavra-chave presente na linha deve ser substituída.

Estou usando a abordagem abaixo:

while IFS=$'\n' read -r line
do
     if [[ $line == *"$string"* ]]; then
           < sed command to replace only keyword >
     fi
done < "$file"

Como posso conseguir isso?

Nota: a extensão '-i' não funciona na minha versão sed.

    
por Menon 31.03.2015 / 09:44

1 resposta

2

Menon, você já tem uma sed resposta como fazer a operação em todo o arquivo. Se a sua intenção é trabalhar em linhas individuais, como mostrado no seu quadro de código, então você não precisa de sed (ou qualquer outro programa externo), já que seu shell pode provavelmente (veja a nota abaixo) fazer a substituição. Supondo que a variável string em seu código contenha (por exemplo) o valor PORT_NUM , a substituição na variável line poderia ser feita por:

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

(Nota: Esta substituição funciona com shells contemporâneas, como bash, ksh, zsh.)

    
por 31.03.2015 / 10:08