我正在尝试使用sed删除空行:
sed '/^$/d'
但我没有运气。
例如,我有以下几行:
xxxxxx
yyyyyy
zzzzzz
我希望它像:
xxxxxx
yyyyyy
zzzzzz
这应该是什么代码?
我正在尝试使用sed删除空行:
sed '/^$/d'
但我没有运气。
例如,我有以下几行:
xxxxxx
yyyyyy
zzzzzz
我希望它像:
xxxxxx
yyyyyy
zzzzzz
这应该是什么代码?
Answers:
您的“空”行中可能有空格或制表符。使用POSIX类与sed去除只含有空格的所有行:
sed '/^[[:space:]]*$/d'
使用ERE的较短版本,例如gnu sed:
sed -r '/^\s*$/d'
(请注意,sed的确实不支持PCRE)。
-r
sed -i "" '/^[[:space:]]*$/d' <filename>,
^\s*$将匹配所有“空”行,此处为空表示行不包含任何字符,或者行仅包含空字符串(例如空格)。使用d命令sed将删除所有匹配的行。
我缺少awk解决方案:
awk 'NF' file
哪个会返回:
xxxxxx
yyyyyy
zzzzzz
这是如何运作的?由于NF代表“字段数”,因此那些空行具有0个字段,因此awk会将0评估为False,并且不打印任何行;但是,如果至少有一个字段,则评估结果为True,并awk执行其默认操作:打印当前行。
$ time (topic companies <data.tpx | awk 'NF' - | awk -f dialog_menu.awk -) real 0m0.006s user 0m0.000s sys 0m0.008s $ time (topic companies <data.tpx | gsed '/^\s*$/d' | awk -f dialog_menu.awk -) real 0m0.014s user 0m0.002s sys 0m0.006s 您是否知道将其包含在awk脚本(例如模式)中的巧妙方法?awk'/ mypattern / {do stuff ...}'
awk 'NF {do stuff...}'。
sed '/^$/d'应该没问题,您是否希望在适当位置修改文件?如果是这样,则应使用该-i标志。
也许这些行不是空的,所以如果是这种情况,请看以下问题:从txtfiles中删除空行,从行首和行尾删除空格,我相信这就是您要实现的目标。
sed -i '/^$/d'是做到这一点的一种方法。
[]应该不是在括号表达式进行转义,所以这里的代码是不正确的\[\[:space:\]\]或\[ \t\]-应[[:space:]]和[ \t]。
我相信这是最简单,最快的方法:
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
grep '\S'绝对不是便携式的。如果可以,grep -P则可以使用,grep -P '\S'但也不是所有平台都支持。
grep .与其他解决方案相比,它的缺点是它将所有文本突出显示为红色。其他解决方案可以保留原始颜色。比较unbuffer apt search foo | grep .来unbuffer apt search foo | grep -v ^$
由于您的文本文件是在Windows上创建的,因此您很可能会看到意外的行为,因此行尾的顺序为\r\n。您可以在运行sed或使用sed之前使用dos2unix将其转换为UNIX样式的文本文件。
sed -r "/^\r?$/d"
删除空行,无论是否有回车。
-r标记的作用是什么,是否可以将其与-i直接修改文件并避免打印到屏幕上。此外,我认为此命令也将适用于sed -r "/^\r$/d"
另一种选择无sed,awk,perl,等
strings $file > $output
字符串-打印文件中可打印字符的字符串。
strings不是string?