为多行添加前缀并保留换行符

为多行添加前缀并保留换行符

我有一个 bash 脚本,其中有一个从 cat 和 grep 的输出设置的变量:

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

结果包含 3 行 EG:

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

我需要在每一行前面加上一个空格:

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

我已经尝试过以下方法:

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

以及一些不同的 sed 命令,所有这些命令都会导致以下结果:

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

他们添加空格,但删除新行

注意:这将被保存到需要换行符的文件中

答案1

awk

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

sed

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

sed(同一文件)

sed -i -s 's/^/ /' file.txt

答案2

在第一次启动时使用awk而不是使用grep停止上进行额外的处理$result(这是一种grep模拟-A Num)。

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

然后打印/保存$result到输出文件中:

printf '%s\n' "$result" > outfile

相关内容