如何在将多行文件转换为变量后,将新行文本追加到最后

时间:2013-11-04 14:33:42

标签: shell unix terminal sh

我有一个包含以下内容的文件:

aaa bbb
ccc ddd
eee fff

如果我将文件捕获到变量中:

var=`cat file.txt`

我可以回复这样的内容:

echo $var
aaa bbb ccc ddd eee fff

或者像这样,保留换行符:

echo "$var"
aaa bbb
ccc ddd
eee fff

我想在变量$ var中添加新的文本行,这样当我将$ var写回文件时:

echo "$var" > newfile.txt

newfile.txt的内容最后会有我的新行:

var2=`cat newfile.txt`
echo "$var2"
aaa bbb
ccc ddd
eee fff
ggg hhh
iii jjj

我无法弄清楚如何做到这一点。 感谢。

4 个答案:

答案 0 :(得分:2)

不是进行赋值然后将数据附加到变量,而是在进行初始赋值时执行所需的操作:

var=$( cat file.txt; echo ggg hhh; echo iii jjj; )

var=$( cat file.txt - << EOF
ggg hhh
iii jjj
EOF
)

答案 1 :(得分:1)

$ var2=$(< file.txt)
$ var2+=$'ggg hhh\niii jjj\n'
$ echo "$var2" > newfile.txt
$ cat new file.txt
aaa bbb
ccc ddd
eee fff
ggg hhh
iii jjj

+=运算符可用于将值附加到现有参数的末尾。您也可以放弃修改var2的值,只需编写如下附加数据:

$ var2=$(< file.txt)
$ { echo "$var2"
>   printf "%s\n" "ggg hhh" "iii jjj"
> } > newfile.txt

一些更新可避免bash次扩展。

  1. $(< file.txt)是标准$(cat file.txt)
  2. 的更高效实施 $'...'不支持
  3. dash,但嵌入式换行仍应有效:

    var2="$string1
    $string2"
    
  4. printf "%s\n" "$string1" "$string2"应该可以在dash中正常使用。

答案 2 :(得分:1)

$ var="$var
> xxx yyy
> zzz ggg"

$ echo $var
aaa bbb
ccc ddd
eee fff
xxx yyy
zzz ggg

答案 3 :(得分:-1)

你只需在附加模式中回显它

echo "$var" >> newfile.txt

&gt;&gt;意味着它不会以普通写入模式打开文件。它在O_RDRW中打开O_APPEND