Puede hacer esto en GNU sed:
sed '0,/Matched Keyword/s//New Inserted Line\n&/'
Pero no es portátil. Como la portabilidad es buena, aquí está en awk:
awk '/Matched Keyword/ && !x {print "Text line to insert"; x=1} 1' inputFile
O, si desea pasar una variable para imprimir:
awk -v "var=$var" '/Matched Keyword/ && !x {print var; x=1} 1' inputFile
Ambos insertan la línea de texto antes la primera aparición de la palabra clave, en una sola línea, según su ejemplo.
Recuerde que tanto con sed como con awk, la palabra clave coincidente es una expresión regular, no solo una palabra clave.
ACTUALIZACIÓN:
Dado que esta pregunta también está etiquetada como bash, aquí hay una solución simple que es puro bash y no requiere sed:
#!/bin/bash
n=0
while read line; do
if [[ "$line" =~ 'Matched Keyword' && $n = 0 ]]; then
echo "New Inserted Line"
n=1
fi
echo "$line"
done
Tal como está, esto como una pipa. En su lugar, puede envolverlo fácilmente en algo que actúe sobre los archivos.
Si quieres uno con sed*:
sed '0,/Matched Keyword/s//Matched Keyword\nNew Inserted Line/' myfile.txt
*solo funciona con GNU sed
Esto podría funcionar para usted:
sed -i -e '/Matched Keyword/{i\New Inserted Line' -e ':a;n;ba}' file
¡Ya casi estás allí! Simplemente cree un bucle para leer desde el Matched Keyword
hasta el final del archivo.
Después de insertar una línea, el resto del archivo se puede imprimir:
- Presentamos un marcador de posición de bucle
:a
(aquía
es un nombre arbitrario). - Imprime la línea actual y busca la siguiente en el espacio del patrón con el
n
comando. - Redirigir el control de regreso usando el
ba
comando que es esencialmente ungoto
ala
titular de lugar Eln
se ocupa naturalmente de la condición de fin de archivo. comando que finaliza cualquier otro comando sed si intenta leer pasado el final del archivo.
Con un poco de ayuda de bash, se puede lograr una verdadera frase:
sed $'/Matched Keyword/{iNew Inserted Line\n:a;n;ba}' file
Alternativa:
sed 'x;/./{x;b};x;/Matched Keyword/h;//iNew Inserted Line' file
Esto usa el Matched Keyword
como una bandera en el espacio de espera y, una vez que se ha establecido, cualquier procesamiento se reduce mediante el rescate inmediato.