我正在尝试使用sed删除空行:
sed '/^$/d'
但我运气不佳。
例如,我有这样几行:
xxxxxx yyyyyy zzzzzz
我希望它是这样的:
这个的代码应该是什么?
sed '/^$/d'应该是好的,你期望修改文件到位吗?如果是这样,你应该使用-i标志。
-i
也许这些行不是空的,所以如果是这样的话,看看这个问题删除txtfiles中的空行,删除行首和行尾的空格,我相信这是你想要达到的。
在“空”行中可能有空格或制表符。使用POSIX类和sed删除所有只包含空格的行:
sed
sed '/^[[:space:]]*$/d'
一个使用ERE的短版本,例如gnu sed:
sed -r '/^\s*$/d'
(注意sed的不支持PCRE。)
你可以说:
sed -n '/ / p' filename #there is a space between '//'
在接受答案在这里和上面接受答案的帮助下,我使用了:
$ 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
这涵盖了所有的基础,完美地满足了我的需求。向最初的海报致敬@肯特和@凯文
你也可以使用"grep"来做类似的事情:
egrep -v "^$" file.txt
我相信这是最简单和最快的方法:
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
awk 'NF' file
这将返回:
这是如何工作的呢?由于NF代表“字段的数量”,那些空行的字段为0,因此awk将0计算为False,并且不打印任何行;但是,如果至少有一个字段,则求值为True,并使awk执行默认操作:打印当前行。
NF
'/^[[:space:]]*$/d'
'/^\s*$/d'
'/^$/d'
-n '/^\s*$/!p'
.
-v '^$'
-v '^\s*$'
-v '^[[:space:]]*$'
/./
'NF'
'length'
'/^[ \t]*$/ {next;} {print}'
'!/^[ \t]*$/'
这也适用于awk。
awk '!/^$/' file xxxxxx yyyyyy zzzzzz
您很可能会看到意想不到的行为,因为您的文本文件是在Windows上创建的,因此行序列的结束是\r\n。在运行sed或use之前,可以使用dos2unix将其转换为UNIX样式的文本文件
\r\n
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 =============
我的__abc0特定的答案是建议使用perl替换操作符和全局模式g标志,如下所示:
perl
g
$ perl -pe s'/^\n|^[\ ]*\n//g' $file xxxxxx yyyyyy zzzzzz
这个答案说明了计算空行中是否有空格([\ ]*),以及使用|分隔多个搜索词/字段。在macOS High Sierra和CentOS 6/7上测试。
[\ ]*
|
供参考,OP的原始代码sed '/^$/d' $file在macOS High Sierra和CentOS 6/7 Linux的高性能超级计算集群上的bash终端上工作得很好。
sed '/^$/d' $file
bash
另一个选项没有sed, awk, perl等
strings $file > $output
字符串-打印文件中可打印字符的字符串。
使用vim编辑器删除空行
:%s/^$\n//g
您正在尝试的命令是正确的,只需使用-E标志。
sed -E '/^$/d'
-E标志使sed捕获扩展正则表达式
NF是awk的命令,用于删除文件中的空行 awk NF filename 通过使用sed sed -r "/^\r?$/d" < / p >
awk NF filename
如果你想使用现代Rust工具,你可以考虑:
cat datafile | rg '.'
cat datafile | rg '\S'
rg '\S' datafile
-N
cat datafile | sd '^\n' ''
cat datafile | sd '^\s*\n' ''
sd '^\s*\n' '' datafile