我有一个 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