Usando sed para substituir caracteres entre dois padrões

2

Eu gostaria de substituir todas as novas linhas depois de uma linha contendo um determinado padrão com uma guia.

Arquivo de entrada:

$ cat File1
NAME1
N1_info
NAME2
N2_info 

Estou criando algumas sinalizações nos finais das "guias" futuras:

sed '/^NAME/s/$/\*/g; /^NAME/!{s/^/+/g}' File1.txt > File2.txt

$ cat File2
NAME1*
+N1_info
NAME2*
+N2_info

Então eu estou removendo os caracteres entre os "flags" para obter a saída desejada. Eu tentei dois padrões sed (mas nenhum deles mudou meu 'File2'):

head File2 | sed -e 's/\(\*\).*\(+\)/\t/g'
head File2 | sed -n '/\*/,/+/p'

Esta é a aparência da saída:

$ cat File3
NAME1   N1_info
NAME2   N2_info 
    
por dovah 29.07.2014 / 17:13

2 respostas

4

Se estes são seus dados reais, então

paste - - < File1 > File3

é tudo que você precisa. colar usa uma guia como um delimitador por padrão.

Se "N1_info" for na verdade mais de uma linha, essa não é a sua solução. Eu faria:

perl -0777 -pe 's/\*\n\+/\t/g' File2 > File3
    
por 29.07.2014 / 17:43
2

com sed :

$ sed '/^NAME/{$!N;s/\n/\t/}' file
NAME1   N1_info
NAME2   N2_info
    
por 29.07.2014 / 17:49

Tags