Estou tentando preparar um script de shell para incluir vários comandos sed encadeados.
Estou usando /bin/sh
no FreeBSD 12. Que parece ser compatível com POSIX (consulte a página de manualaqui).
Foi o que tentei, percebe-se claramente que o comportamento não é o 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
$
Acho que estou faltando algo básico aqui.
Responder1
Você éleituralinhas, mas você não está fazendo nada com o que lê. Tentar:
#!/bin/sh
while read line
do
printf '%s\n' "$line" | sed 's/<TEST>/FOO/'
done <&0
Além disso, você pode querer alterar o while read line
para
while IFS= read -r line || [ -n "$line" ]
para garantir que você está lendo tudo como cat testfile.txt | sed 's/<TEST>/FOO/'
faria. Ver
Responder2
De qualquer forma, enquanto vocêpodeescrever scripts complexos em shell, é melhor usar uma linguagem projetada para scripts, não para uso interativo. Python, Perl ou Raku são minhas primeiras ideias ao fazer algo mais complexo do que algumas linhas. Python é popular e está disponível em quase todos os lugares, assim como Perl; Raku é uma evolução/redesenho do Perl, não tão popular (ainda?).