为什么这个正则表达式不起作用?

时间:2009-08-24 10:47:51

标签: regex sed

正则表达式:

^ *x *\=.*$   

表示“匹配文字x前面有任意数量的空格,后跟任意数量的空格,然后是等号,然后是直到行尾的任何内容。” Sed被调用为:

sed -r -e 's|^ *x *\=.*$||g' file

然而它没有找到一个匹配,尽管它应该。正则表达式有什么问题?

致所有人:感谢您的回答和努力!似乎问题出现在输入文件中的选项卡中,这些选项卡与空格说明符“ ”不匹配。但是,\s的解决方案无论现有标签如何都可以使用!

3 个答案:

答案 0 :(得分:5)

^\s*x\s*=.*$

也许你必须逃避一些角色,一个一个地弄明白。

BTW:正则表达式标签应该有三个要求:

输入字符串是什么,输出字符串和平台/语言是什么。

答案 1 :(得分:0)

或者'^[ ]*x[ ]*='。它有点兼容,但不匹配标签等。而且,如果你不需要小组,为什么还要为这一行的其余部分烦恼呢?

答案 2 :(得分:0)

sed逐行处理文件,并为每个文件执行给定的程序。做你想做的最简单的程序是

sed -re '/^ *x *=.*$/!d' file
  • /^ *x *=.*$/”选择与该模式匹配的每一行。
  • !”否定了结果。
  • d”删除该行。
除非另有说明,否则

sed将默认打印所有行。这有效地打印了与模式匹配的线条。

另一种写作方式是:

sed -rne '/^ *x *=.*$/p' file
  • /^ *x *=.*$/”选择与该模式匹配的每一行。
  • p”打印该行。

这里的不同之处在于我使用“-n”开关来禁止自动打印线条,而只打印我选择的线条。

您还可以使用“grep”执行此任务:

grep -E '^ *x *=.*$' file