我想在“开始”一词之后在文本文件中附加一个变量。
echo $variable
给
rn=45
fg=12
cd=6
我的文本文件看起来像这样
mixture
Molefraction
begin
END_OF_FILE
我想要的输出
mixture
Molefraction
begin
rn=45
fg=12
cd=6
END_OF_FILE
我正在使用这个sed
命令
sed -i "/begin/a $variable" file.txt
这给出了这样的错误消息
sed: -e expression #1, char 56: extra characters after command
使用
sed
一个知道“here-strings”的shell:这将查找字符串
begin
,file
当匹配时,插入标准输入中的任何内容。我们通过$variable
here-string 传递标准输入上的值。对于其他 shell,here-string 被简单地替换为
printf
over a pipe:要将其保存到新文件,请在最后使用重定向。如果您
sed
支持使用 就地编辑sed -i
,则可以使用它来修改原始文件(建议在文件副本上进行测试;多次运行会多次将数据添加到文件中)。要在 eg 中获得正确的缩进
bash
:在这里,我们依靠 shell 的分词来格式化变量的值。我们使用
set -f
来确保不会发生文件名通配,然后我们设置$IFS
为换行符,并让 shell 将变量的值拆分为换行符分隔的单词。稍作修改,printf
在每个单词前插入两个空格。使用
awk
:这将查找包含 的行
begin
,打印它,然后打印变量内容,然后移动到下一行。默认为简单地打印任何其他行。注意:这不会缩进变量,如示例中所示。
使用 GNU awk,您可以使用以下
-i
选项编辑文件:对于所有其他版本,
awk
您将需要创建一个新文件:然后,您可以根据
mv
需要用新文件替换旧文件