我有以下文件CHANGELOG.rst
:
some text
=========
header
------
* list
* list
header
------
* list
我需要在文件标题后面添加一个条目,以便更新后的文件如下所示:
some text
=========
new header
----------
* new list
header
------
* list
* list
header
------
* list
我添加了
new header
----------
* new list
部分已存在于$CHANGES
变量中。
我知道这可以用sed
完成,但我不知道如何处理它。
答案 0 :(得分:3)
使用sed
:
sed -i '/PATTERN/a Line which you want to append' filename
-i
用于就地替换
对于你的例子:
sed -i "/=========/a ${CHANGES}" file
some text
=========
new header
----------
* new list
header
------
* list
* list
header
------
* list
答案 1 :(得分:1)
我不会使用sed
将值注入文本文件。我会使用ed
。
ed file <<EOF
4i
$yourtext
.
w
EOF
这就是说,
答案 2 :(得分:1)
如果您想确保仅在第一次出现时执行此操作,请使用以下内容:
CHANGES="line1\nline2"
sed -i "0,/\(^=\+$\)/s//\1\n${CHANGES}/" filename
答案 3 :(得分:0)
以下是使用grep:
的丑陋解决方案grep -B100000 "=========" CHANGELOG.rst > new.txt
echo >> new.txt
echo "new header" >> new.txt
echo "----------" >> new.txt
echo >> new.txt
echo "\* new list" >> new.txt
echo >> new.txt
grep -A100000 "=========" CHANGELOG.rst >> new.txt
grep -A获取匹配字符串后的行,grep -B获取后面的行。仅当您要分割文件的匹配字符串仅存在一次时,它才有效。
答案 4 :(得分:0)
sed '/^header/ i\
your content like New Header\
and his content
' YourFile
但这会发生在每个标题
具体(根据要求)
sed '/^header/ i\
new header\
----------\
\
* new list\
' YourFile
答案 5 :(得分:0)
我能够在this stackoverflow回答中找到我的问题的解决方案。
感谢@ mklement0,代码为:
sed -i "4 i\
${CHANGES//$'\n'/\\$'\n'}" ./CHANGELOG.rst