Estoy intentando preparar un script de shell para incluir varios comandos sed encadenados.
Estoy usando /bin/sh
FreeBSD 12. Que parece ser compatible con POSIX (consulte la página de manualaquí).
Esto es lo que he probado, se ve claramente que el comportamiento no es el esperado:
$ cat testfile.txt
<TEST>
$ cat test.sh
#!/bin/sh
while read line
do
sed 's/<TEST>/FOO/'
done <&0
$ cat testfile.txt | ./test.sh
$ cat testfile.txt | sed 's/<TEST>/FOO/'
FOO
$
Supongo que me falta algo básico aquí.
Respuesta1
Estáslecturalíneas, pero no estás haciendo nada con lo que lees. Intentar:
#!/bin/sh
while read line
do
printf '%s\n' "$line" | sed 's/<TEST>/FOO/'
done <&0
También es posible que desee cambiar while read line
el
while IFS= read -r line || [ -n "$line" ]
para asegurarse de que está leyendo todo como cat testfile.txt | sed 's/<TEST>/FOO/'
lo haría. Ver
Respuesta2
En cualquier caso, mientras ustedpoderAl escribir scripts complejos en Shell, es mejor utilizar un lenguaje diseñado para scripting, no para uso interactivo. Python, Perl o Raku son mis primeras ideas a la hora de hacer algo más complejo que unas pocas líneas. Python es popular y está disponible en casi todas partes, lo mismo que Perl; Raku es una evolución/rediseño desde cero de Perl, no tan popular (¿todavía?).