sed替换匹配字符串以外的字符串

时间:2014-05-06 09:43:57

标签: sed

问题陈述:

使用用户代理A2PC更改与GENCOMPROHIBITED不匹配的每个用户代理,并保持GENCOMA2PC不变

表达式:

echo \"GENCOM\" | sed -r -e 's/(^((?!A2PC)(?!GENCOM).)*$)/PROHIBITED/g'

错误:

sed: -e expression #1, char 41: Invalid preceding regular expression

我删除了-r然后错误没有抛出,但它无法正常工作

echo \"GENDFGGH\" | sed  -e 's/(^((?!A2PC)(?!GENCOM).)*$)/PROHIBITED/g'
"GENDFGGH"

请帮我解决这个问题

2 个答案:

答案 0 :(得分:2)

首先查找您的模式然后执行sub:

# echo \"GENCsOM\" | sed -e '/^"\(GENCOM\|A2PC\)"$/! s/^.*$/PROHIBITED/'
PROHIBITED
# echo \"GENCOM\" | sed -e '/^"\(GENCOM\|A2PC\)"$/! s/^.*$/PROHIBITED/'                                                                        
"GENCOM"

答案 1 :(得分:0)

sed '/A2PC/ !{
   /GENCOM/ ! {
      s/$/PROHIBITED/
      }
   }' YourFile

双重排除而非变更,符合posix