use sed para ejecutar un script de shell si la búsqueda falla

use sed para ejecutar un script de shell si la búsqueda falla

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 sedy 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 variable replse incrementa y se realiza el reemplazo
  • Al final, salga con el logical notde la variable (si reples cero, salga con status 1)

Alternativa: grepla 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

información relacionada