Delete empty lines using sed
我尝试使用sed删除空行:
1 | sed '/^$/d' |
但我没有运气。
例如,我有以下几行:
1 2 3 4 5 6 7 | xxxxxx yyyyyy zzzzzz |
号
我希望它是这样的:
1 2 3 | xxxxxx yyyyyy zzzzzz |
这个代码应该是什么?
您的"空"行中可能有空格或制表符。使用带有
1 | sed '/^[[:space:]]*$/d' |
一个较短的版本,使用了ERE,例如GNU SED:
1 | sed -r '/^\s*$/d' |
号
(请注意,SED不支持PCRE。)
我错过了
1 | awk 'NF' file |
会返回:
1 2 3 | xxxxxx yyyyyy zzzzzz |
号
这是怎么工作的?由于
也许这些行不是空的,所以如果是这样的话,看看这个问题,从txtfiles中删除空行,从行首和行尾删除空格,我相信这就是你想要实现的。
塞德
- 埃多克斯1〔6〕
- 江户十一〔七〕号
- 埃多克斯1〔8〕
- 埃多克斯1〔9〕
格雷普
- 埃多克斯1〔10〕
- 江户十一〔11〕。
- 埃多克斯1〔12〕
- 埃多克斯1〔13〕
AWK
- 埃多克斯1〔14〕
- 埃多克斯1〔15〕
- 江户十一〔16〕号
- 埃多克斯1〔17〕
- 埃多克斯1〔18〕
我相信这是最简单和最快的一个:
1 | cat file.txt | grep . |
。
如果您还需要忽略所有空白行,请尝试以下操作:
1 | cat file.txt | grep '\S' |
。
例子:
1 2 3 4 5 6 7 8 9 10 11 12 | s="\ \ a\ b\ \ Below is TAB:\ \ Below is space:\ \ c\ \ "; echo"$s" | grep . | wc -l; echo"$s" | grep '\S' | wc -l |
输出
1 2 | 7 5 |
。
在这里接受的答案和上面接受的答案的帮助下,我使用了:
1 2 3 4 5 6 | $ 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
你可以说:
1 | sed -n '/ / p' filename #there is a space between '//' |
您很可能会看到意外的行为,因为您的文本文件是在Windows上创建的,所以行尾序列是
。在运行sed或使用之前,可以使用dos2unix将其转换为unix样式的文本文件。
1 2 | sed -r"/^ ?$/d" |
号
删除空白行,无论回车是否存在。
这也适用于awk。
1 2 3 4 | awk '!/^$/' file xxxxxx yyyyyy zzzzzz |
号
你也可以用"grep"来做类似的事情:
1 | egrep -v"^$" file.txt |
我的
1 2 3 4 5 6 | $ perl -pe s'/^ |^[\ ]* //g' $file xxxxxx yyyyyy zzzzzz |
号
这个答案说明了空行中是否有空格(
仅供参考,操作系统的原始代码
对于我和Freebsd 10.1和Sed一起工作的人来说,只有这个解决方案:
1 | sed -e '/^[ ]*$/d'"testfile" |
号
在
测试文件包含:
1 2 3 4 5 6 7 | fffffff next 1 tabline ffffffffffff ffffffff next 1 Space line ffffffffffff ffffffff empty 1 lines ffffffffffff ============ EOF ============= |
号