arquivo comparação de arquivo [duplicado]

0

No OSX, o comando a seguir remove padrões e afeta palavras inteiras:

sed -e "$(sed 's:.*:s/&//g:' /path/to/wordsToRemove.txt)” /path/to/sourceFile.txt > outFile.txt

wordsToRemove.txt contém:

it
for

sourceFile.txt contém:

it was green forever for candy

outFile.txt contém:

was green ever candy

A palavra "para sempre" é correspondida e foi alterada para "sempre", embora eu quisesse combinar a palavra "para" por si só, não como parte de "para sempre".

É possível evitar isso?

    
por nny 22.04.2017 / 08:51

1 resposta

1

Você pode combinar limites de palavras em sed usando os marcadores especiais \< , \> em seu regexp.

Por exemplo:

 $sed -e 's/\<for\>//g' < sourceFile.txt 
 it was green forever  candy

Este regexp corresponde apenas a "for" como uma palavra inteira, não como parte de uma eternidade.

Você pode, portanto, alterar seu oneliner original como

sed -e "$(sed 's:.*:s/\<&\>//g:' /path/to/wordsToRemove.txt)” /path/to/sourceFile.txt > outFile.txt

Observe o escape de \< e \> .

    
por 22.04.2017 / 09:11