Bash:更改后脚本文件的"Title"



我有一个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
...

相关内容

  • 没有找到相关文章

最新更新