Aqui está um arquivo de exemplo:
somestuff...
all: thing otherthing
some other stuff
O que eu quero fazer é adicionar à linha que começa all:
assim:
somestuff...
all: thing otherthing anotherthing
some other stuff
Respostas:
Isso funciona para mim
sed '/^all:/ s/$/ anotherthing/' file
A primeira parte é um padrão a ser encontrado e a segunda parte é uma substituição do sed comum usando $
para o final de uma linha.
Se você deseja alterar o arquivo durante o processo, use a -i
opção
sed -i '/^all:/ s/$/ anotherthing/' file
Ou você pode redirecioná-lo para outro arquivo
sed '/^all:/ s/$/ anotherthing/' file > output
Você pode anexar o texto $0
no awk se ele corresponder à condição:
awk '/^all:/ {$0=$0" anotherthing"} 1' file
/patt/ {...}
se a linha corresponder ao padrão fornecido por patt
, execute as ações descritas em {}
./^all:/ {$0=$0" anotherthing"}
se a linha começar (representada por ^
) com all:
, acrescente anotherthing
à linha.1
como uma condição verdadeira, dispara a ação padrão de awk
: imprimir a linha atual ( print $0
). Isso acontecerá sempre, então imprimirá a linha original ou a modificada.Para sua entrada fornecida, ele retorna:
somestuff...
all: thing otherthing anotherthing
some other stuff
Observe que você também pode fornecer o texto para anexar em uma variável:
$ awk -v mytext=" EXTRA TEXT" '/^all:/ {$0=$0mytext} 1' file
somestuff...
all: thing otherthing EXTRA TEXT
some other stuff
awk: can't set $0
/usr/xpg4/bin/awk
qual é o awk "bom".
Em bash:
while read -r line ; do
[[ $line == all:* ]] && line+=" anotherthing"
echo "$line"
done < filename
Aqui está outra solução simples usando sed.
$ sed -i 's/all.*/& anotherthing/g' filename.txt
Explicação:
all. * significa todas as linhas iniciadas com 'all'.
& representa a correspondência (ou seja, a linha completa que começa com 'todos')
em seguida, o sed substitui o anterior pelo posterior e adiciona a palavra "outra coisa"
Solução com awk:
awk '{if ($1 ~ /^all/) print $0, "anotherthing"; else print $0}' file
Simplesmente: se a linha começar com all
imprimir a linha mais "outra coisa", caso contrário, imprima apenas a linha.
awk '$1=="all:" {$(NF+1)="anotherthing"} 1'
condition {actions}
pares. Se condition
for omitido, as ações serão executadas para cada registro. Se {actions}
forem omitidos e a condição for avaliada como verdadeira (que é o caso do número 1
), a ação padrão é imprimir o registro atual.