Dav*_*ave 3 shell scripting sed files
我在 Amazon Linux 上使用 bash shell。我正在尝试在文件顶部插入一行,所以我有
header_line="first_line_of_file"
...
sed -i "1 i\$header_line" /tmp/$file_title
Run Code Online (Sandbox Code Playgroud)
然而,实际出现在我的文件顶部的是
$header_line
Run Code Online (Sandbox Code Playgroud)
如何告诉 sed 不要按字面解释我的变量,而是使用变量中的值插入到文件顶部?
如果您使用的是 GNU 或busybox
, sed
,那么您应该能够这样做
sed -i "1i $header_line" "/tmp/$file_title"\n
Run Code Online (Sandbox Code Playgroud)\n\n您遇到的问题是由于$
从 shell 中转义,因此它无法识别$header_line
为变量。
使用 NetBSD 或 OpenBSD sed
(也适用于 FreeBSD 和 macOS,但需要在-i
和\'\'
之间有一个空格):
sed -i\'\' "1i\\\\\n$header_line\n" "/tmp/$file_title"\n
Run Code Online (Sandbox Code Playgroud)\n\nBSDsed
与传统sed
实现一样,并且按照 POSIX 的规定,在命令\\
后需要一个和一个文字换行符i
,并且由于我们使用双引号,因此需要\\
从 shell 中转义。
另一种选择是使用cat
:
printf \'%s\\n\' "$header_line" | cat - "/tmp/$file_title" >new_file && mv new_file "/tmp/$file_title"\n
Run Code Online (Sandbox Code Playgroud)\n\n这也绕过了 St\xc3\xa9phane Chazelas 在下面的评论中提到的值中的反斜杠问题$header_line
。
归档时间: |
|
查看次数: |
2737 次 |
最近记录: |