UNIX:使用tr来删除空行

1 人不认可

我看到有人用sed来做(如果你能写出如何用sed来做并解释背后的regex,我也会很感激),但我想知道如何用tr来做。

我的想法是。替换代码0】或 ^\n ,但第一个删除了所有的"/n",第二个则没有。

3 个评论
你的(第一条)命令应该删除所有换行符和 ^ 字符。 你在 "或 "后面的片段应该给出一个关于不匹配的 ' 的shell错误。
@stark的答案是正确的,但你接受了一个没有回答你问题的答案。
@KeithThompson stark的回答并不完全有效,见 stackoverflow.com/questions/70613222/... .
linux
unix
sed
tr
Plk
Plk
发布于 2022-01-07
4 个回答
Walter A
Walter A
发布于 2022-01-07
已采纳
0 人赞同

另一个解决方案是 grep . file

stark
stark
发布于 2022-01-07
0 人赞同

至少在linux上,tr可以挤压重复字符。

echo -ne $a
the quick
brown fox
jumps over
echo -ne $a |tr -s '\n'
the quick
brown fox
jumps over
    
This isn't specific to Linux. The -s option is specified by POSIX. pubs.opengroup.org/onlinepubs/9699919799/utilities/tr.html
这不会删除输入开头的空行。试试 printf '\na\n' | tr -s '\n'
daidoji70
daidoji70
发布于 2022-01-07
0 人赞同

tr对字符流进行操作,而不是对行流进行操作(这是sed和awk之类的默认操作)。 -d标志可以删除字符列表中的任何字符。 tr -d '\n' 将删除流中所有的换行符。

我自己也不确定你是否可以用tr删除空行。

要使用 sed sed '/^$/d' 。 替换代码2】匹配行的前面。 替换代码3】匹配行末 d 表示你想让sed删除任何与之匹配的东西。 然而,这种类型的问题已经在其他地方得到了更全面的回答,所以我会回到谷歌,找到一个全面的sed或unix教程。

另一个答案是正确的; tr -s '\n' 会删除空行。
不知道为什么这个问题被否决了,因为OP要求的也是一个轿车的解决方案。
@KeithThompson 如果换行在文件的开头或结尾,就不会。
@stark 说得好。我试着撤回我的降级投票,但我不能,除非答案被编辑了。
Ed Morton
Ed Morton
发布于 2022-01-07
0 人赞同

tr is short for tr anslate.它是将一组字符转换为另一组。这与删除文件中的空行没有关系,还有其他一些工具可以做到这一点(如sed、awk、grep)。

使用强制POSIX工具删除空行的简单方法是。

grep '.' file
grep -v '^$' file
sed -n '/./p' file
sed '/^$/d' file