sed
, como awk
ou cut
ou perl -ne
, funciona individualmente em cada linha, uma após a outra.
sed -e code1 -e code2
é realmente executado como:
while(patternspace = getline()) {
linenumber++
code1
code2
} continue {print patternspace}
Se o seu código2 for 2,$ s/foo/bar/
, isso é:
if (linenumber >= 2) sub(/foo/, "bar", patternspace)
Como sua entrada tem apenas uma linha, o sub()
nunca será executado.
A inserção de caracteres de nova linha no espaço padrão em code1
não aumenta o linenumber
.
Em vez disso, você tem um espaço de padrão com várias linhas enquanto processa o primeiro e apenas a linha de entrada. Se você quiser fazer modificações na segunda linha e no espaço padrão multilinha, você precisa fazer algo como:
s/\(\n[^(]*\)(/ (/g
Embora aqui, é claro, você também pode fazer as duas operações de uma só vez:
id | sed 's/,\([^(]*\)(/\n\t (/g'