我有一个postscript文件,我想在从中生成pdf之前更改"标题"属性。
遵循文件的开始:
%!PS-Adobe-3.0
%%BoundingBox: 0 0 595 842
%%HiResBoundingBox: 0 0 595 842
%%Title: GMT v5.1.1_r12693 [64-bit] Document from pscoast
%%Creator: GMT5
[…]
我现在将线%%Title: GMT v5.1.1_r12693 [64-bit] Document from pscoast
与^%%Title:s.*
匹配,并喜欢用变量的含量替换所有事后的所有内容。
到目前为止,我的非工作代码:
sed "s/(^%%Title:)s.*$/1 $title/g" test_file.ps
我的sed
知识非常有限,到目前为止,我的实验尚未产生任何有用的东西 - 您的帮助将不胜感激。
最好,克里斯
编辑:添加我的非工作代码
使sed
正确工作的技巧之一是正确引用了shell引用。这将创建一个带有新标题的PostScript文件:
newtitle="Shiny New Title"
sed 's/^%%Title:.*/%%Title: '"$newtitle/" sample.ps >new.ps
这将更新到位的后录:
newtitle="Shiny New Title"
sed -i 's/^%%Title:.*/%%Title: '"$newtitle/" sample.ps
在sed
表达式中使用的许多字符,例如$
,(
或*
,都是壳刺激性的。为了保护它们免受可能的外壳膨胀,它们应该是单价的。但是,由于希望外壳扩展$newtitle
变量,因此不能以单价为单位。因此,如果仔细看,您会看到上述替代表达式分为两个部分,一个单引号和一个双引号。在它们之间添加一个空间以使其更清晰:
's/^%%Title:.*/%%Title: ' "$newtitle/" # Do not use this form.
因此,壳字符受到单样保护,只有我们希望壳弄乱的部分才在双引号中
也许这就是您要寻找的:
myvar="some content"
sed -e "s/^(%%Title:).*/1 $myvar/" < inputfile
# output
...
%%Title: some content
...