如果替换成功,则执行命令

时间:2014-01-20 15:08:40

标签: sed

我想用sed,

从perl脚本中删除\"
 sed -ne ' 
    #(here some substitutions...)
    s/print "\(.*[^"]\)"/\1/p;
 ' | \
 sed -e 's/\\"/"/g'

是否可以仅在\"上用"替换第一次替换的行?换句话说,将这个脚本放在一行中?

分支并不酷,因为如果未完成之前的替换,则该条件被视为真(但最新的替换尚未完成)...

EXEMPLE:

#! /usr/bin/perl
(...)
while (@someArray) {
    print "la variable \"$_\" est cool!\n"; 
    syslog ('info|machin', "la variable \"$_\" est cool!"); 
}

"la variable "$_" est cool!\n"

中没有可能的替代品
 syslog ('info|machin', "la variable \"$_\" est cool!"); 

如果此行已被选中。

1 个答案:

答案 0 :(得分:1)

sed -ne ' 
# if other substitution are to be made without regarding of s/print....
#(here some substitutions...) 

    s/print "\(.*[^"]\)"/\1/;
    t bs

# if other substitution are to be made if /print... is NOT found
#(here some substitutions...) 
    b

: bs
# if other substitution are to be made if /print... is found
#(here some substitutions...) 
    s/\\"/"/g
    p
'

s//之后,如果为真,则t表示测试和转到标签(在这种情况下为bs)。

所以在这里,替换,如果发生,转到bs并进行其他替换而不是打印结果,如果不是,则转到结尾(b没有标签跟随)

(由于对其他替代的不同解释,代码审查)