使用sed在字符前或新行插入文本?

使用sed在字符前或新行插入文本?,sed,latex,Sed,Latex,我试图使用脚本在出现新文本时在latex文件中插入\cbstart{}和\cbend{}标记 end=$(( $start + $diff )) sed -i "" "${start}s/^/\\\\cbstart{} /" "$OUT" sed -i "" "${end}s/$/ \\\\cbend{}/" "$OUT" 但是,如果将\cbend{}标记放在末尾包含注释的新行上,则: \cbstart{} Example text. %Example commment \cbend{} 注

我试图使用脚本在出现新文本时在latex文件中插入\cbstart{}和\cbend{}标记

end=$(( $start + $diff ))
sed -i "" "${start}s/^/\\\\cbstart{} /" "$OUT"
sed -i "" "${end}s/$/ \\\\cbend{}/" "$OUT"
但是,如果将\cbend{}标记放在末尾包含注释的新行上,则:

\cbstart{} Example text. %Example commment \cbend{}
注释结束标记。有没有办法使用sed将\cbend{}标记放在%之前或新行上?

也许:

sed -i ""  "${end}s/\\( %.*\\|$\\)/ \\\\cbend{}\\1/" "$OUT"
以更理智的方式逃跑

sed -i ""  "${end}"'s/\( %.*\|$\)/ \\cbend{}\1/' "$OUT"

我在发布之前测试过:

end=""
{ echo foo; echo "bar % with comment"; } | 
sed "${end}"'s/\( %.*\|$\)/ \\cbend{}\1/'

由于OP位于Mac上,因此所需的sed咒语为:

sed -i "" -E "${end}"'s/( %.*|$)/ \\cbend{}\1/' "$OUT"

使用其中一个返回sed:1:“sed”:未终止的替换模式。删除第二个sed会删除返回值,但无论如何它都不会添加任何sed。您使用的是什么版本的sed?在macbook上,项目:text_cmds-84Try:
sed-i”“-E“${end}”s/(.*$)/\\cbend{}\1/'$OUT”
sed -i "" -E "${end}"'s/( %.*|$)/ \\cbend{}\1/' "$OUT"