estoy haciendo
sed "s/test1/replacetext" testfile.txt
Estoy intentando usar /q si no puedo encontrar 'prueba1' y ejecutar un script de shell. ¿Cómo puedo hacer eso? gracias nata
Respuesta1
Con GNU sed
y múltiples líneas de entrada:
sed -n '/pattern/{h;s//replacement/;};p;${g;//!q1;}' file
- En líneas que contienen
pattern
:- Agregue la línea al búfer de retención
- Realizar sustitución
- imprimir cada línea
$
Cuando se llega a la última línea ( ):- obtener el buffer de retención
- Si el espacio del patrón no contiene
pattern
, salga con el código de salida1
- Las expresiones regulares vacías
//
utilizan el último patrón de expresiones regulares utilizado
Alternativa - awk
:
awk 'END{exit !repl} /pattern/{repl++; sub(/pattern/,"replacement")} 1' file
- Si una línea contiene
pattern
, la variablerepl
se incrementa y se realiza el reemplazo - Al final, salga con el
logical not
de la variable (sirepl
es cero, salga con status1
)
Alternativa: grep
la entrada de antemano, por ejemplo:
if grep -q 'pattern' file; then
# input contains pattern - do sed replacement
sed 's/pattern/replacement/' file
else
: input does not contain pattern - execute shell script
fi