在文本文件的第一行之后添加定义的变量

时间:2014-08-25 21:04:41

标签: linux unix text awk sed

我正在尝试在第一行之后将定义的bash变量插入到文本文档中:

sed -i "2i ${storm}" ${HOMEDIR}${PATH1}${YMD}/tmp_tc_tracks

以上命令对我不起作用......

4 个答案:

答案 0 :(得分:1)

尝试转义$,如此:

sed -i "2i \${storm}" ${HOMEDIR}${PATH1}${YMD}/tmp_tc_tracks

您的shell可能正在尝试在您的环境中找到${storm},但因为它无法摆脱它。

没有逃脱,我看到以下错误:

ryan@bsp1:~/tmp$ sed -i "2i ${asdf}" test.txt
sed: -e expression #1, char 3: expected \ after `a', `c' or `i'

答案 1 :(得分:0)

您可以使用awk轻松完成此操作:

$ cat file
line 1
line 2
line 3
$ var="new line"
$ awk -v v="$var" 'NR==2{print v}1' file
line 1
new line
line 2
line 3

如果要覆盖原始文件,可以使用中间临时文件执行标准技巧:

awk -v v="$var" 'NR==2{print v}1' file > tmp && mv tmp file

答案 2 :(得分:0)

sed "2 i\\
${storm}" ${HOMEDIR}${PATH1}${YMD}/tmp_tc_tracks

var替换需要双引号,但这也意味着转义\\命令之后所需的转义字符(i)以及此后的新行

答案 3 :(得分:0)

除了回答

之外,

单引号也应该有效

sed -i '2i ${storm}' file

双引号启用shell扩展,单引号将文本视为文字