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
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
Isso deve funcionar para você
sed -e 's_^all: .*_& anotherthing_'
Usando o comando s (substituir), você pode pesquisar uma linha que satisfaça uma expressão regular. No comando acima,
&
representa a string combinada.fonte
Você pode anexar o texto
$0
no awk se ele corresponder à condição:awk '/^all:/ {$0=$0" anotherthing"} 1' file
Explicação
/patt/ {...}
se a linha corresponder ao padrão fornecido porpatt
, execute as ações descritas em{}
./^all:/ {$0=$0" anotherthing"}
se a linha começar (representada por^
) comall:
, acrescenteanotherthing
à linha.1
como uma condição verdadeira, dispara a ação padrão deawk
: imprimir a linha atual (print $0
). Isso acontecerá sempre, então imprimirá a linha original ou a modificada.Teste
Para sua entrada fornecida, ele retorna:
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
fonte
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
fonte
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"
fonte
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.fonte
awk '$1=="all:" {$(NF+1)="anotherthing"} 1'
condition {actions}
pares. Secondition
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úmero1
), a ação padrão é imprimir o registro atual.