无法理解正则表达式的一部分

时间:2015-10-18 23:49:40

标签: regex unix sed

这是文字:

We will now present the Linux ls command
   ... here description of ls

We will now present the Linux cd command
   ... here description of cd
   ... more description
Done

以下sed替换正则表达式应用于文本

sed 's/.*Linux \(.*\) .*/\1:/' ex2.txt

其中提供以下输出

ls:
   ... here description of ls

cd:
   ... here description of cd
   ... more description
Done

有人可以告诉我它是如何运作的吗?

1 个答案:

答案 0 :(得分:3)

.*Linux :“Linux”之前的任何内容,该字本身后跟一个空格。 (的 We will now present the Linux 

\(.*\):然后用括号捕获一些东西。 ( ls cd

 .*:然后是另一个空间和其他任何东西。 (的  command

替换为:

\1::无论第一个捕获组捕获的是什么,然后是冒号( ls: cd:

在这种情况下,.匹配除了换行符之外的任何字符

\(.*\)只匹配那个单词,因为在“Linux”之前必须有一个空格,并且在该单词之后必须有一个空格:命令名称和单词“command”之间的空格。

如果使用扩展正则表达式(sed -r ...),则不必使用反斜杠转义括号。

所以你也可以写:

sed -r 's/.*Linux (.*) .*/\1:/' ex2.txt