2014-03-28 38 views
0

我试图用一个脚本时,新的文本时插入\ cbstart {}和\ cbend {}标签乳胶文件。插入文本使用的sed?

end=$(($start + $diff)) 
sed -i "" "${start}s/^/\\\\cbstart{} /" "$OUT" 
sed -i "" "${end}s/$/ \\\\cbend{}/" "$OUT" 

然而,当\ cbend {}标签被放置在在结尾处包含一个注释一个新行:

\cbstart{} Example text. %Example commment \cbend{} 

注释掉结束标记。有没有办法使用SED放置\ cbend {}标签%之前或在新行的方法吗?

回答

0

也许:

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/' 
foo \cbend{} 
bar \cbend{} % with comment 

由于OP是Mac上,所需的sed咒语是:

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

使用任sed的那些回报:1: “sed的”:未结束的替代图案。删除第二个sed会删除退货,但是不管怎样它都不会添加\ cbend {}。 –

+0

您使用的是什么版本的sed? –

+0

在MacBook,PROJECT:text_cmds-84 –