sed中变量之间的换行符

时间:2018-03-21 20:11:04

标签: bash sed

我试图在文本文件的顶部打印两个变量。 我有变量:

file=someFile.txt
var1=DONKEY
var2=KONG
sed -i "1s/^/$var1$var2/" $file

最后一行的输出是:DONKEYKONG 虽然我需要它:

DONKEY KONG

我试过了:

sed -i "1s/^/$var1\n$var2/" $file

sed -i "1s/^/$var1/\n$var2/" $file

sed -i "1s/^/$var1/g $file

sed -i "2s/^/$var2/g $file

然而,这些都没有。

编辑: 我尝试了$var1\\n$var2,在记事本中打开了文件,但它看起来并不正确。我在记事本中打开了++&崇高,这是正确的格式

3 个答案:

答案 0 :(得分:1)

在替换字符串中添加文字换行符。你还需要逃脱它。

sed -i "1s/^/$var1\\
$var2/" $file

答案 1 :(得分:1)

使用ed

printf "%s\n" 1 i "$var1" "$var2" "." w q | ed -s "$file"

答案 2 :(得分:0)

两种方法:

1)通过使用反斜杠转义它们来在命令中包含换行符:

sed -i -e "1s/^/${var1}\\
${var2}\\
/" "$file"

确保\\后面紧跟换行符,没有其他空格。

或者,2)避免换行问题,并利用sed在其保留空间周围插入换行符的能力:

sed -i -e "1h;1s/.*/${var2}/;1G;1h;1s/.*/${var1}/;1G" "$file"

为了解释第二种方法,命令执行以下操作:

h: copy the first line to the hold space
s: replace the first line with the contents of var2
G: append the hold space to the pattern space with a newline separator

After this we've inserted var2 above line 1, on its own line.
Repeat h, s, and G with var1.
Apply all commands to line 1, no other lines.