Puede combinar la grep
en el sed
así:
exec 3> >(sed -une '/^good:/s//I got: /p')
echo "bad:data1">&3
echo "good:data2">&3
Desembalaje de que un poco: Usted puede poner una expresión regular (entre barras como de costumbre) antes de cualquier comando sed, lo que hace que sólo se aplicará a líneas que coinciden con esa expresión regular. Si el primer argumento de expresión regular para el comando s
es la cadena vacía (s//whatever/
), reutilizará la última expresión regular que coincida, que en este caso es el prefijo, por lo que ahorrará tener que repetirse. Y finalmente, la opción -n
le dice a sed que imprima solo lo que específicamente se le dice que imprima, y el sufijo /p
en el comando s
le dice que imprima el resultado de la sustitución.
La opción -e
no es estrictamente necesaria, pero es un buen estilo, simplemente significa que "el siguiente argumento es el script sed, no un nombre de archivo".
siempre ponen guiones de sed en comillas simples a menos que necesite sustituir una variable de shell allí, y aún así me gustaría poner todo pero la variable de shell entre comillas simples (la variable de shell es, por supuesto, doble cita) Evita un montón de dolor relacionado con la barra invertida de esa manera.
De hecho fui por la ruta Perl como me recomendó. No estaba al tanto de su utilidad en los scripts bash. perl y bash definitivamente van bien juntos. – User1