2015-09-28 91 views
0

我有一个工作sed命令替换在匹配块中的一些坐标,如下图所示: sed命令看起来像这一点,并在庆典工作:Sed块在tcsh上出现乱码。工作在bash

sed '/^matched.*$/ { 
n;n;n;s/img{[0-9]*,[0-9]*}/img{0,10}/;n;s/img{[0-9]*,[0-9]*}/img{20,30}/;n;s/img{[0-9]*,[0-9]*}/img{40,0}/ 
} 
' file.txt 

它搜索的匹配,并执行一些小号 ubstitutions在ñ分机线
的问题是,相反的是bash,如果I型的代码的第一行并按下回车键在tcsh的。代码立即执行并返回缺失'。 如果我执行相同的命令与tcsh的,并删除所有的换行符然后我得到sed的:命令乱码:(在Ubuntu的bash sed的版本4.2.2它甚至工作没有换行)

我知道,问题与包含sed代码块的花括号{}之前和之后的新行有关。但我不知道如何在那里输入。
此外,我不知道如何将这些换行符放在shell脚本中,以便在其单独的行上放置大括号。

file.txt的:

unmatched 
              { 
              "img{170,68}" 
              "img{817,252}" 
              "img{664,1096}" 
              "img{12,943}" 
              } 

matched 
              { 
              "img{0,0}" 
              "img{0,111}" 
              "img{222,333}" 
              "img{444,0}" 
              } 

回答

2

tcshcsh句法嗣,因此,要求任一'...single-quotes...'"...dbl-quotes..."内部的任何虚线与\字符被转义。

所以,你要

sed '/^matched.*$/ { \ 
n;n;n;s/img{[0-9]*,[0-9]*}/img{0,10}/;n;s/img{[0-9]*,[0-9]*}/img{20,30}/;n;s/img{[0-9]*,[0-9]*}/img{40,0}/ \ 
} \ 
' file.txt 

还要注意\字符必须是行的最后一个字符;以下任何空格字符都会生成同样神秘的错误消息:-)

(我现在没有`[t] csh'环境可用,所以我可以'按照我通常的方式测试这个答案)

IHTH