Sed erro “sed: -e expressão # 1, char [#]: caracteres extras após o comando”

1

sed '/\r$/ {N s/\n//}'
sed: -e expression #1, char 10: extra characters after command

Eu quero entender o que está errado na minha linha de comando. Quando eu posso fazer o seguinte em um script, mas não em uma linha de comando.

Eu tenho trabalhado no tutorial em www.grymoire.com. Quando eu fiquei preso na seção Trabalhando com várias linhas . Esse script funciona bem.

#!/bin/sh
sed '
# look for a "#" at the end of the line
/#$/ {
# Found one - now read in the next line
    N
# delete the "#" and the new line character, 
    s/#\n//
}' file

No meu caso, estou procurando por \ r ou retorno ^ M.

#!/bin/sh
sed '
# look for a "#" at the end of the line
/\r$/ {
# Found one - now read in the next line
    N
# delete the "#" and the new line character, 
    s/\r\n//
}' file

O problema é que quando tento convertê-lo em um comando shell de linha única, isso me causa erros.

sed '/\r$/ {N s/\n//}'
sed: -e expression #1, char 10: extra characters after command
sed '/\r$/{N s/\n//}'
sed: -e expression #1, char 9: extra characters after command
sed '/\r$/{Ns/\n//}'
sed: -e expression #1, char 8: extra characters after command

Eu quero entender o que está errado na minha linha de comando. Quando posso fazer o seguinte em um script, mas não em uma linha de comando.

Eu criei um script sed para fazer o trabalho que quero.

cat test.sed 
#!/bin/sed -f
/\r$/ {
N 
s/\n//
}
    
por nelaaro 03.08.2011 / 12:00

1 resposta

4

Você precisa usar um ponto-e-vírgula ; para separar os comandos sed na mesma linha. Especificamente, entre o N e o s . Nenhum ponto-e-vírgula é necessário quando há uma nova linha, e é por isso que seu formulário de script funciona.

mudar

sed '/\r$/ {N s/\n//}'  

para

sed '/\r$/ {N; s/\n//}'
             ^
    
por 03.08.2011 / 12:03