Usando sed para adicionar texto a um arquivo antes e depois da palavra

1

Eu tenho um arquivo com palavras, uma palavra por linha, que eu agora quero mudar para que se torne um arquivo .sh com uma string egrep-search para cada palavra. A string de pesquisa que eu quero no final é assim:

'egrep -wi '\|WORD\.\.nn' stats_all.txt > WORD_frekvens.txt'

Meu arquivo de palavras é assim:

$ more -10 word_file.txt
anakonda
ord
tröja
bord
glas
pension
larm
risk
försening
rapport

Eu tentei fazer isso com a seguinte string:

sed -e 's/\(.*\)/egrep -wi '\''\|\.\.nn'\'' stats_all.txt > _frekvens.txt/' word_file.txt | more

Mas dá a saída:

_frekvens.txt_all.txt > WORD

Por que não funciona usar o aqui? Parece ser essa a parte que é o problema, pois funciona se eu trocar por uma palavra.

Tudo o que eu escrevo depois que acaba escrevendo sobre o conteúdo de , ou seja, "WORD". Se eu escrever algo somente antes de , isso funciona bem.

Muito grato por qualquer ajuda.

    
por Ingrid 01.06.2015 / 13:12

3 respostas

1

Você também pode processar sua lista de palavras com o seguinte comando perl :

$ perl -ne 's/\s*$//; print "egrep -wi 7\|${_}\.\.nn7 stats_all.txt > ${_}_frekvens.txt\n"' word_file.txt

Note que estou usando 7 para evitar o escape de ' (aspas simples).

Com um manequim word_file.txt :

foo
bar

A saída é:

egrep -wi '\|foo\.\.nn' stats_all.txt > foo_frekvens.txt
egrep -wi '\|bar\.\.nn' stats_all.txt > bar_frekvens.txt
    
por Sylvain Pineau 01.06.2015 / 14:07
1

O seguinte comando:

sed -e "s/\(.*\)/\'egrep -wi '\\|\\.\\.nn' stats_all.txt > _frekvens.txt\'/" word_file.txt

fornece a saída:

'egrep -wi '\|anakonda\.\.nn' stats_all.txt > anakonda_frekvens.txt'
'egrep -wi '\|ord\.\.nn' stats_all.txt > ord_frekvens.txt'
'egrep -wi '\|tröja\.\.nn' stats_all.txt > tröja_frekvens.txt'
'egrep -wi '\|bord\.\.nn' stats_all.txt > bord_frekvens.txt'
'egrep -wi '\|glas\.\.nn' stats_all.txt > glas_frekvens.txt'
'egrep -wi '\|pension\.\.nn' stats_all.txt > pension_frekvens.txt'
'egrep -wi '\|larm\.\.nn' stats_all.txt > larm_frekvens.txt'
'egrep -wi '\|risk\.\.nn' stats_all.txt > risk_frekvens.txt'
'egrep -wi '\|försening\.\.nn' stats_all.txt > försening_frekvens.txt'
'egrep -wi '\|rapport\.\.nn' stats_all.txt > rapport_frekvens.txt'
    
por jhilmer 01.06.2015 / 18:12
1

Como acabou, você usa as quebras de linha do Windows ( \r\n ) no arquivo. Devido a este fato, eu ajustei meus comandos, observe o … gsub(/\r/,"") …

Esta é uma tarefa simples para awk :

awk 'gsub(/\r/,"") {print "'egrep -wi 7\|" $_ "\.\.nn7 stats_all.txt > "$_"_frekvens.txt'"}' <your_input_file>

para gravar a saída no arquivo entrada :

awk -i inplace 'gsub(/\r/,"") {print "'egrep -wi 7\|" $_ "\.\.nn7 stats_all.txt > "$_"_frekvens.txt'"}' <your_input_file>

para gravar a saída em um novo arquivo:

awk 'gsub(/\r/,"") {print "'egrep -wi 7\|" $_ "\.\.nn7 stats_all.txt > "$_"_frekvens.txt'"}' <your_input_file> > output_file

Amostra com edição in-line

% cat words
foo
bar

% awk -i inplace 'gsub(/\r/,"") {print "'egrep -wi 7\|" $_ "\.\.nn7 stats_all.txt > "$_"_frekvens.txt'"}' words

% cat words                                                                                               
'egrep -wi '\|foo\.\.nn' stats_all.txt > foo_frekvens.txt'
'egrep -wi '\|bar\.\.nn' stats_all.txt > bar_frekvens.txt'
    
por A.B. 01.06.2015 / 16:52