使用SED删除空行
我正在尝试删除使用sed的空行
sed '/^$/d'
但我没有运气。 例如我有这样的话:
xxxxxx yyyyyy zzzzzz
我想它是这样的:
xxxxxx yyyyyy zzzzzz
这个代码应该是什么?
你的空行可能有空格/制表符。 如果是这样,这将有助于:
sed '/^\s*$/d'
这使用\s
来匹配任何空格字符。
sed '/^$/d'
应该没问题,你是否期望修改文件? 如果是的话,你应该使用-i
标志。
也许这些行不是空的,所以如果是这样的话,看看这个问题从txtfiles中删除空行,删除开始和结束行的空格我相信这就是你想要实现的。
我错过了awk
解决scheme:
awk 'NF' file
哪个会返回:
xxxxxx yyyyyy zzzzzz
这个怎么用? 由于NF
代表“字段数”,那些空的行有0个结果,所以awk的结果为0为False,不打印行; 但是,如果至less有一个字段,则评估为True,并使awk
执行其默认操作:打印当前行。
我相信这是最简单和最快的一个:
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
在这里接受的答案和上面接受的答案的帮助下,我使用了:
$ 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
-
'/^\[\[:space:\]\]*$/d'
-
'/^\s*$/d'
-
'/^$/d'
-
-n '/^\s*$/!p'
grep的
-
.
-
-v '^$'
-
-v '^\s*$'
-
-v '^\[\[:space:\]\]*$'
AWK
-
/./
-
'NF'
-
'length'
-
'/^[ \t]*$/ {next;} {print}'
-
'!/^\[ \t\]*$/'
你可以说:
sed -n '/ / p' filename #there is a space between '//'
你也可以用“grep”来做类似的事情:
egrep -v "^$" file.txt
这也适用于awk。
awk '!/^$/' file xxxxxx yyyyyy zzzzzz
您很可能会看到意外的行为,因为您的文本文件是在Windows上创build的,所以行结束符是\ r \ n。 在运行sed或使用之前,可以使用dos2unix将其转换为UNIX样式的文本文件
sed -r“/ ^ \ r?$ / d”
删除空行,不pipe回车是否在那里。
对于我用FreeBSD 10.1和sed只能工作这个解决scheme:
sed -e '/^[ ]*$/d' "testfile"
[]
里面有空格和制表符号。
testing文件包含:
fffffff next 1 tabline ffffffffffff ffffffff next 1 Space line ffffffffffff ffffffff empty 1 lines ffffffffffff ============ EOF =============