我试图在文本文件的顶部打印两个变量。 我有变量:
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
,在记事本中打开了文件,但它看起来并不正确。我在记事本中打开了++&崇高,这是正确的格式
答案 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.