我正在尝试使用sed删除空行:
sed '/^$/d'
但我运气不佳。
例如,我有这样几行:
xxxxxx
yyyyyy
zzzzzz
我希望它是这样的:
xxxxxx
yyyyyy
zzzzzz
这个的代码应该是什么?
我正在尝试使用sed删除空行:
sed '/^$/d'
但我运气不佳。
例如,我有这样几行:
xxxxxx
yyyyyy
zzzzzz
我希望它是这样的:
xxxxxx
yyyyyy
zzzzzz
这个的代码应该是什么?
Sed '/^$/d'应该是好的,你期望修改文件到位吗?如果是这样,您应该使用-i标志。
也许这些行不是空的,如果是这样的话,看看这个问题从txtfiles中删除空行,从行开始和行结束删除空格,我相信这就是你想要达到的目的。
在“空”行中可能有空格或制表符。使用POSIX类和sed删除所有只包含空格的行:
sed '/^[[:space:]]*$/d'
一个使用ERE的短版本,例如gnu sed:
sed -r '/^\s*$/d'
(注意sed不支持PCRE。)
借助这里的公认答案和上面的公认答案,我使用了:
$ 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
这涵盖了所有的基础,完美地满足了我的需求。向最初的海报致敬@肯特和@凯文
我相信这是最简单和最快的方法:
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
我错过了awk的解决方案:
awk 'NF' file
这将返回:
xxxxxx
yyyyyy
zzzzzz
这是如何工作的呢?因为NF代表“字段的数量”,那些为空的行有0个字段,因此awk的计算结果为0到False,并且不打印任何行;但是,如果至少有一个字段,则求值为True,并使awk执行默认操作:打印当前行。
sed
' / ^[[:空间:]]*美元/ d ' ' / ^ \ s *美元/ d ' ' / ^ $ / d ' - n ' / ^ \ s *美元/ !p '
grep
. - v“^ $” - v ' ^ \ s * $ ' - v " ^[[:空间:]]*美元”
awk
/。/ “NF” “长度” '/^[\t]*$/ {next;} {print}' ”!/ ^ \ [t] * $ / '
您很可能会看到意想不到的行为,因为您的文本文件是在Windows上创建的,因此行序列的末尾是\r\n。在运行sed或use之前,可以使用dos2unix将其转换为UNIX样式的文本文件
sed -r "/^\r?$/d"
无论回车符是否存在,都要删除空行。
对我来说,使用FreeBSD 10.1和sed只工作了这个解决方案:
sed -e '/^[ ]*$/d' "testfile"
[]里面有空格和制表符。
测试文件包含:
fffffff next 1 tabline ffffffffffff
ffffffff next 1 Space line ffffffffffff
ffffffff empty 1 lines ffffffffffff
============ EOF =============
我的bash特定的答案是建议使用perl替换操作符与全局模式g标志,如下所示:
$ perl -pe s'/^\n|^[\ ]*\n//g' $file
xxxxxx
yyyyyy
zzzzzz
这个答案说明了计算空行中是否有空格([\]*),以及使用|分隔多个搜索词/字段。在macOS High Sierra和CentOS 6/7上测试。
仅供参考,OP的原始代码sed '/^$/d' $文件在高性能超级计算集群的macOS High Sierra和CentOS 6/7 Linux的bash Terminal中正常工作。
如果你想使用现代Rust工具,你可以考虑:
ripgrep: Cat数据文件| rg '。'带空格的行被认为是非空的 cat datafile | rg '\S'行带空格被认为是空的 rg '\S'带空格的数据文件行被认为是空的(可以添加-N来删除在屏幕上显示的行号) sd 带空格的Cat数据文件| sd '^\n' "行被认为是非空的 带空格的Cat数据文件| sd '^\s*\n' "行被认为是空的 Sd '^\s*\n' "数据文件就地编辑