Aquí hay un archivo de ejemplo:
somestuff...
all: thing otherthing
some other stuff
Lo que quiero hacer es agregar a la línea que comienza all:
así:
somestuff...
all: thing otherthing anotherthing
some other stuff
Esto funciona para mi
sed '/^all:/ s/$/ anotherthing/' file
La primera parte es un patrón para encontrar y la segunda parte es una sustitución de sed ordinaria que se usa $
para el final de una línea.
Si desea cambiar el archivo durante el proceso, use la -i
opción
sed -i '/^all:/ s/$/ anotherthing/' file
O puede redirigirlo a otro archivo
sed '/^all:/ s/$/ anotherthing/' file > output
Esto debería funcionar para ti
sed -e 's_^all: .*_& anotherthing_'
Usando el comando s (sustituto) puede buscar una línea que satisfaga una expresión regular. En el comando anterior,
&
representa la cadena coincidente.fuente
Puede agregar el texto
$0
en awk si coincide con la condición:awk '/^all:/ {$0=$0" anotherthing"} 1' file
Explicación
/patt/ {...}
si la línea coincide con el patrón dado porpatt
, realice las acciones descritas en ella{}
./^all:/ {$0=$0" anotherthing"}
si la línea comienza (representada por^
) conall:
, añádaloanotherthing
a la línea.1
como condición verdadera, activa la acción predeterminada deawk
: imprimir la línea actual (print $0
). Esto sucederá siempre, por lo que imprimirá la línea original o la modificada.Prueba
Para su entrada dada, devuelve:
Tenga en cuenta que también puede proporcionar el texto para agregar en una variable:
$ awk -v mytext=" EXTRA TEXT" '/^all:/ {$0=$0mytext} 1' file somestuff... all: thing otherthing EXTRA TEXT some other stuff
fuente
awk: can't set $0
/usr/xpg4/bin/awk
cuál es el awk "bueno".En bash:
while read -r line ; do [[ $line == all:* ]] && line+=" anotherthing" echo "$line" done < filename
fuente
Aquí hay otra solución simple que usa sed.
$ sed -i 's/all.*/& anotherthing/g' filename.txt
Explicación:
all. * significa que todas las líneas comenzaron con 'all'.
& representar la coincidencia (es decir, la línea completa que comienza con 'todos')
luego sed reemplace el primero con el posterior y agrega la palabra 'otra'
fuente
Solución con awk:
awk '{if ($1 ~ /^all/) print $0, "anotherthing"; else print $0}' file
Simplemente: si la fila comienza con
all
imprimir la fila más "otro", de lo contrario imprima sólo la fila.fuente
awk '$1=="all:" {$(NF+1)="anotherthing"} 1'
condition {actions}
pares. Sicondition
se omite, las acciones se realizan para cada registro. Si{actions}
se omiten y la condición se evalúa como verdadera (que es el caso del número1
), la acción predeterminada es imprimir el registro actual.