我正在尝试使用sed删除空行:
sed '/^$/d'
但是我在这方面没有什么运气。
例如,我有以下这几行代码:
xxxxxx
yyyyyy
zzzzzz
我希望它能像这样:
xxxxxx
yyyyyy
zzzzzz
这个应该怎么编码?
我正在尝试使用sed删除空行:
sed '/^$/d'
但是我在这方面没有什么运气。
例如,我有以下这几行代码:
xxxxxx
yyyyyy
zzzzzz
我希望它能像这样:
xxxxxx
yyyyyy
zzzzzz
这个应该怎么编码?
sed
和 POSIX 类来删除只包含空格的所有行:sed '/^[[:space:]]*$/d'
使用ERE的较短版本,例如使用gnu sed:
sed -r '/^\s*$/d'
(注意,sed 不支持 PCRE。)
sed -i "" '/^[[:space:]]*$/d'
来处理名为 <filename>
的文件,该命令可以去除文件中空白行。 - jww^\s*$
将匹配所有“空”行,这里的空意味着该行不包含任何字符,或者该行仅包含空字符串(例如空格)。所有匹配的行将被 sed 的 d
命令删除。 - Kentsed '/\S/!d' file
- potong-r
标志。 - undefined我不会用 awk
解决方案:
awk 'NF' file
这将返回:
xxxxxx
yyyyyy
zzzzzz
这是如何工作的?由于NF
代表着“字段数量”,所以那些空行的字段数为0,因此awk将0视为False并且不打印任何行;但是,如果至少有一个字段,则评估结果为True,并使awk
执行其默认操作:打印当前行。
`$ time (topic companies real 0m0.006s
user 0m0.000s
sys 0m0.008s
`$ time (topic companies real 0m0.014s
user 0m0.002s
sys 0m0.006s
您是否知道将此包含到 awk 脚本中的巧妙方法,例如模式?
awk '/mypattern/ {do stuff...}'
- Bernie Reiter'/^[[:space:]]*$/d'
:删除空行。'/^\s*$/d'
:删除空行。'/^$/d'
:删除空行。-n '/^\s*$/!p'
:打印非空行。.
:匹配任意字符。-v '^$'
:显示非空行。-v '^\s*$'
:显示非空行。-v '^[[:space:]]*$'
:显示非空行。/./
:匹配任何字符'NF'
:当前记录(行)的字段数'length'
:当前记录(行)的字符数'/^[ \t]*$/ {next;} {print}'
:删除空行'!/^[ \t]*$/'
:打印非空行\[\[:space:\]\]
或\[ \t\]
并不正确——应该是[[:space:]]
和[ \t]
。 - Benjamin W.sed '/^$/d'
应该是可以的,你希望修改文件中的内容吗?如果是的话,你应该使用 -i
标志。
也许这些行不是空的,如果是这种情况,请查看这个问题:从文本文件中删除空行,删除行首和行尾的空格,我相信那就是你想要实现的目标。
sed -i '/^$/d'
是一种实现该功能的方式。 - Alberto Zaccagni我认为这是最简单、最快速的方法:
cat file.txt | grep .
如果您需要同时忽略所有的空白行,那么可以尝试这样做:cat file.txt | grep '\S'
例子:
s="\
\
a\
b\
\
Below is TAB:\
\
Below is space:\
\
c\
\
"; echo "$s" | grep . | wc -l; echo "$s" | grep '\S' | wc -l
输出
7
5
cat
命令,grep
命令也可以直接处理文件:grep . file.txt
。 - Ciro Santilli OurBigBook.comgrep --color=never .
来覆盖此设置。 - Clement Cherlin另一个没有使用sed
、awk
、perl
等的选项。
strings $file > $output
strings - 打印文件中可打印字符的字符串。
strings
而不是 string
? - Mickael B.--bytes=min-len
选项允许更短的行。 - SouthwindCG在获得此处的采纳答案以及上面被采纳的答案的帮助下,我已经使用了:
$ sed 's/^ *//; s/ *$//; /^$/d; /^\s*$/d' file.txt > output.txt
`s/^ *//` => left trim
`s/ *$//` => right trim
`/^$/d` => remove empty line
`/^\s*$/d` => delete lines which may contain white space
这完全覆盖了我的所有需求,并且完美地发挥了作用。向原始作者@Kent和@kev致敬。
您可以这样说:
sed -n '/ / p' filename #there is a space between '//'
您可能看到了意外的行为,这是因为您的文本文件是在Windows上创建的,所以行尾序列是\r\n
。在运行sed之前,您可以使用dos2unix将其转换为UNIX风格的文本文件,或者使用其他方法。
sed -r "/^\r?$/d"
无论是否存在回车符,都可以删除空行。
-r
标志是做什么的?是否可以将其与 -i
结合使用以直接修改文件并避免在屏幕上打印。此外,我认为这个命令也可以写成 sed -r "/^\r$/d"
。 - Alexander Cska