我试图使用bash脚本删除文件中的空行。现在,当我在互联网上搜索时,我发现了它的两个变种。在一个中,我们可以直接修改源文件,在另一个中我们可以将输出存储在另一个文件中。以下是代码段:
sed -i '/^$/d' fileName.txt
sed '/^$/d' fileName.txt > newFileName.txt
我无法理解的是如何将正则表达式'/ ^ $ / d'解释为空行。我担心我在正则表达中不擅长。有人可以解释一下吗?
还有其他方法吗?
答案 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)
^$
表示空行,因为^
是零宽度锚点,意味着行的开始,而$
是零宽度锚点含义该行的结束。因此^$
必须是零宽度(即根本没有字符)才能匹配。在该行的^
之前或该行$
之后也不能有任何字符。