我试图使用sed删除空行:
sed '/^$/d'
Run Code Online (Sandbox Code Playgroud)
但我没有运气.
例如,我有这些行:
xxxxxx
yyyyyy
zzzzzz
Run Code Online (Sandbox Code Playgroud)
我希望它像:
xxxxxx
yyyyyy
zzzzzz
Run Code Online (Sandbox Code Playgroud)
应该是什么代码?
Ken*_*ent 587
您的"空"行可能包含空格或制表符.使用POSIX类与sed去除只含有空格的所有行:
sed '/^[[:space:]]*$/d'
Run Code Online (Sandbox Code Playgroud)
使用ERE的较短版本,例如使用gnu sed:
sed -r '/^\s*$/d'
Run Code Online (Sandbox Code Playgroud)
(请注意,sed的确实不支持PCRE).
fed*_*qui 80
我错过了awk解决方案:
awk 'NF' file
Run Code Online (Sandbox Code Playgroud)
哪个会回归:
xxxxxx
yyyyyy
zzzzzz
Run Code Online (Sandbox Code Playgroud)
这是如何运作的?由于NF代表"字段数",那些空的行有0个fiedls,因此awk评估0到False并且没有打印行; 但是,如果至少有一个字段,则评估为True并awk执行其默认操作:打印当前行.
Alb*_*gni 54
sed '/^$/d'应该没问题,您是否希望修改文件?如果是这样,你应该使用-i旗帜.
也许那些行不是空的,所以如果是这样的话,看看这个问题从txtfiles中删除空行,从行的开头和结尾删除空格我相信这是你想要实现的.
Ole*_*zko 39
Vad*_*dim 29
我相信这是最简单,最快的一个:
cat file.txt | grep .
Run Code Online (Sandbox Code Playgroud)
如果你需要忽略所有的空格行,那么试试这个:
cat file.txt | grep '\S'
Run Code Online (Sandbox Code Playgroud)
例:
s="\
\
a\
b\
\
Below is TAB:\
\
Below is space:\
\
c\
\
"; echo "$s" | grep . | wc -l; echo "$s" | grep '\S' | wc -l
Run Code Online (Sandbox Code Playgroud)
输出
7
5
Run Code Online (Sandbox Code Playgroud)
Con*_*Man 14
在此处接受的答案和上面接受的答案的帮助下,我使用了:
$ 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
Run Code Online (Sandbox Code Playgroud)
这涵盖了所有基础,完美地满足了我的需求.感谢@Kent和@kev的原创海报
use*_*660 12
另一种选择无sed,awk,perl,等
strings $file > $output
Run Code Online (Sandbox Code Playgroud)
字符串 - 在文件中打印可打印字符的字符串。
小智 9
您尝试的命令是正确的,只需使用 -E 标志即可。
sed -E '/^$/d'
Run Code Online (Sandbox Code Playgroud)
-E 标志使 sed 捕获扩展正则表达式。更多信息请点击此处
小智 5
你可以说:
sed -n '/ / p' filename #there is a space between '//'
Run Code Online (Sandbox Code Playgroud)