我的sed很接近......但不是那里,你能帮忙吗?

时间:2012-03-29 16:29:08

标签: regex sed

我想只打印符合条件的行:“worde:”和“wordo;” 我到目前为止:

sed -n '/\([a-z]*\)\1e:\1o;/p;'  

但它不太有用。 有人可以完善它并告诉我它的固定版本/我的错误是什么? (请注意,从来没有大写字母,因此为什么我没有在我的初始角色范围内打扰)

谢谢你,

5 个答案:

答案 0 :(得分:3)

这将处理“worde:wordo;”的行(单词之间没有)出现:

sed -n '/\([a-z]*\)e:\1o;/p;'

如果你需要允许单词之间的字符,你需要这样的东西:

sed -n '/\([a-z]*\)e:.*\1o;/p;'

答案 1 :(得分:0)

我对您的问题的解释是,您希望匹配同时包含worde:wordo;

的行
 sed -n '/worde:/{/wordo;/p}' infile

-n参数阻止sed打印模式空间(infile),第一个正则表达式匹配,然后控制流进入块,如果正则表达式不匹配,则忽略该行。在块内,如果第二个正则表达式匹配,则打印该行。

答案 2 :(得分:0)

使用交替的一种方式:

sed -n '/word\(e:\|o;\)/ p' infile

答案 3 :(得分:0)

是否需要使用捕获组?我没有他们。

$ sed -n '/[\w]*[oe][:;]/p'

  • [\w]* - 匹配任何单词字符。 (如果你真的只想要[a-z],那就换掉吧 回来了)
  • [oe] - 这些单词字符必须以e或结尾 o
  • [:;] - 然后有:;

答案 4 :(得分:0)

这可能对您有用:

sed '/^\(.*\)[eE]:\s*\1[oO];/!d' file