0

I have a bash script which has a variable being set from the output of cat and grep:

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

result contains 3 lines E.G.:

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

I need to prefix each line with a space:

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

I have tried the following:

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

and a few different sed commands, all of which result in this:

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

they add the spaces, but delete the new lines

Note: this will be saved into a file which needs the line breaks

αғsнιη
  • 41,407
rob k
  • 1
  • < $file grep -A2 "$search" | sed -e 's/^/ /'. If you want to use the text captured in $result then <<< "$result" sed -e 's/^/ /'. echo converts newlines to spaces. – AlexP Nov 17 '17 at 10:54
  • 3
  • Dear @steeldriver, Yes, correct for the last part of OP's question which s/he wants to have newlines intact, the duplicated question as you flagged is right duplicate, but here OP wants to add a space for each line which is the main challenge and his question. – αғsнιη Nov 17 '17 at 11:57
  • 1
    @αғsнιη the OP seems to have solved the "main challenge" (although personally I would have used sed rather than awk); their code should work fine if they simply quote $result to prevent word splitting by the shell i.e. echo "$result" | awk '{print " "$0}' – steeldriver Nov 17 '17 at 14:31
  • Voting to leave open - this is a much more specific use case while the linked question gives a highly general answer that doesn't help with the user's immediate problem. – Shadur-don't-feed-the-AI Nov 20 '17 at 09:26

2 Answers2

0

awk

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

sed

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

sed (same file)

sed -i -s 's/^/ /' file.txt
Archemar
  • 31,554
0

Use awk at first start instead of using grep and stop going to extra processing on $result (This is a kind of grep's -A Num simulation).

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

Then print/save the $result into a output file:

printf '%s\n' "$result" > outfile
αғsнιη
  • 41,407