sed estranheza, inigualável {

6

Estou tentando usar o r (comando read para anexar o conteúdo de data2 aos dados. Eu quero acrescentar o conteúdo depois da linha contendo 'dois'. Quero excluir a linha que contém 'dois'.

Mas eu bati em uma parede de tijolos. Parece um inseto, mas talvez seja apenas a minha própria estupidez.

Ok, este comando funciona.

% sed -r '/two/ r /tmp/data2' <  /tmp/data
one
two
five
six
seven
three
four

Sed parece um pouco finito sobre espaços .. Não é óbvio o porquê, mas eu vou viver com isso.

% sed -r '/two/ r /tmp/data2  ' <  /tmp/data
one
two
three
four

Meu objetivo é executar um (d) delete após o comando read para remover a linha original. Isso é tanto quanto eu recebo.

% sed -r '/two/{ r /tmp/data2}' <  /tmp/data
sed: -e expression #1, char 0: unmatched '{'

Tenho certeza de que '{' está sendo correspondido, não é o comando mais longo do mundo.

O que eu realmente quero rodar ...

% sed -r '/two/{ r /tmp/data2; d }' <  /tmp/data

O sistema é o Ubuntu 12. GNU SED.

    
por binarytemple.co.uk 01.08.2012 / 14:00

1 resposta

8

r /file/path não deve ter nada depois em sua linha.

Você pode achar este site útil como Resumo de Comandos para sed

echo 'one
two
five
six
seven
three
four' >inputfile

echo 'contents of readfile' >readfile

sed  '/two/{r readfile
         d}' inputfile

Nota: Você pode utilizar o shell para parametrizar sed, usando "aspas duplas". Eles ativam a expansão de variáveis do shell. r ocupa todos os espaços literalmente ... portanto, não cite o nome do arquivo e não tenha nenhum espaço em branco (o espaço em branco entre r e /file/path está ok).

rfile='/tmp/readfile with   multiple spaces in name'
sed  "/two/{r $rfile
       d}" inputfile

saída

one
contents of readfile
five
six
seven
three
four

Em uma nota lateral: Não há realmente nenhum valor usando < para o seu arquivo de entrada. Use o parâmetro de arquivo de entrada do sed (mantém as coisas mais simples).

    
por 01.08.2012 / 14:50