什么是正则表达式' / ^ $ / d'意思?

时间:2013-04-03 19:21:09

标签: regex unix

我试图使用bash脚本删除文件中的空行。现在,当我在互联网上搜索时,我发现了它的两个变种。在一个中,我们可以直接修改源文件,在另一个中我们可以将输出存储在另一个文件中。以下是代码段:

sed -i '/^$/d' fileName.txt

sed '/^$/d' fileName.txt > newFileName.txt

我无法理解的是如何将正则表达式'/ ^ $ / d'解释为空行。我担心我在正则表达中不擅长。有人可以解释一下吗?

还有其他方法吗?

6 个答案:

答案 0 :(得分:5)

/^$/d


/ - start of regex
^ - start of line
$ - end of line
/ - end of regex
d - delete lines which match

所以基本上找到任何空的行(起点和终点是相同的,例如没有字符),并删除它们。

答案 1 :(得分:1)

/^$/d是一个删除空行的sed命令。它实际上是两件事:一个正则表达式/^$/和一个sed指令d

/^$/组件是与空字符串匹配的正则表达式。更具体地说,它查找一行(^)的开头,直接跟在一行($)的末尾,也就是空行。如果行中有任何内容 - 空格或其他 - 该模式将不匹配,因为行的结尾不会直接跟在行的开头。

d组件是sed指令,表示“删除”。在此用法中,d适用于与给定正则表达式(/^$/)匹配的任何行,因此它将删除任何空行。

由于sed正在自动打印模式下运行(没有-n开关),它将打印所有未删除的行 - 因此,在这种情况下不匹配{{1} } - 这样命令最终成为一个过滤器,从输入中删除所有空行。

答案 2 :(得分:1)

/^$/:选择为空的行(^匹配行的开头,$匹配行的结尾,这样就匹配开始并立即结束但没有干预的行内容)。
d:删除匹配的行。

答案 3 :(得分:1)

让我们从正则表达式的解释开始:

/^$/d

^匹配行的开头,$匹配行的结尾。所以^$将匹配空行。

您还在d使用sed标记。这将删除匹配的行。

-i切换sed -i '/^$/d' fileName.txt会使sed就地删除这些行。如果省略,它会将结果输出到标准输出。

答案 4 :(得分:0)

^ - start of a line
$ - end of line

所以

/^$/ 

它匹配行开头,然后紧跟行尾。这意味着,空行。

带有d的sed命令意味着删除匹配的行,即删除空行。

基本上是这样的:

sed '/regex/d(elete)'  --this is not a real command line, just for explanation.

答案 5 :(得分:0)

^$表示空行,因为^是零宽度锚点,意味着行的开始,而$是零宽度锚点含义该行的结束。因此^$必须是零宽度(即根本没有字符)才能匹配。在该行的^之前或该行$之后也不能有任何字符。