prefixando várias linhas preservando as quebras de linha

0

Eu tenho um script bash que tem uma variável sendo definida a partir da saída de cat e grep:

result='cat $file | grep -A2 "$search"'

o resultado contém 3 linhas E.G .:

This is Line 1
This is line 2
This is line 3

Preciso prefixar cada linha com um espaço:

 This is Line 1
 This is line 2
 This is line 3

Eu tentei o seguinte:

result='echo $result | awk '{print " "$0}''

e alguns comandos sed diferentes, todos os quais resultam nisso:

 This is Line 1 This is line 2 This is line 3

eles adicionam os espaços, mas excluem as novas linhas

Nota: isso será salvo em um arquivo que precisa das quebras de linha

    
por rob k 17.11.2017 / 11:50

2 respostas

0

awk

awk '{printf " %s\n",$0}' file-in.txt > file-out.txt

sed

sed -e 's/^/ /' file-in.txt > file-out.txt

sed (mesmo arquivo)

sed -i -s 's/^/ /' file.txt
    
por 17.11.2017 / 12:13
0

Use awk no primeiro início, em vez de usar grep e pare de processar extra em $result (esse é um tipo de simulação grep -A Num ).

result=$(awk -v patt="$search" '$0 ~ patt{S=1}
         S && ($0 ~ patt || ++n<3) {print " "$0} n==3{n=0}' infile)

Em seguida, imprima / salve o $result em um arquivo de saída:

printf '%s\n' "$result" > outfile
    
por 17.11.2017 / 12:23