无法使用 sed 正则表达式删除空行
Posted
技术标签:
【中文标题】无法使用 sed 正则表达式删除空行【英文标题】:Can't remove empty lines with sed regex 【发布时间】:2012-06-01 02:40:37 【问题描述】:我有一个这样的文件:
2733617 3.00 3 3
2733617 E1b1 8.00 8 16
2733617 E1b1b1b 2.00 2 4
2733617 I1 294.00 296 590
2733617 I2 1.00 1 2
2733617 I2a1 2.00 2 4
sed '/^$/d'
对我不起作用。 Outfile 看起来就像 infile。它应该删除空行。
【问题讨论】:
检查那些“空”行上没有空格(包括回车):od -c filename
感谢您提供一个很高兴知道的命令。但是空行中只有“\n”。
sed -n l file
将显示 sed
在删除换行符后看到的内容。
每个空行都有美元符号。
多么奇怪。你的命令应该有效。你能发布od -x
的输出吗?
【参考方案1】:
你也可以试试:
sed -n '/^./p'
仅打印行首至少有一个字符的行。 (顺便说一句sed '/^$/d'
为我工作)
【讨论】:
1.也可以使用grep -v '^$'
2、sed
命令如何使用?使用 UNIX 管道? (cat file | sed ...
)?也许您正在管道标准错误输出而不是标准输出?
Grep 给了我同样的结果。我“sed 'blahblah' 文件 > 新文件”。【参考方案2】:
由于“空白”行中似乎存在未知的不可打印字符,您可以重新编写 sed 命令以仅显示其中包含可打印字符的行:
sed -n '/[!-~]/p'
【讨论】:
【参考方案3】:不幸的是,手册说使用像[!-~]
这样的范围是不安全的。但是,最终使用:print:
打印包含可打印字符的行对我有用:
sed -n '/[[:print:]]/p'
【讨论】:
这是一个老问题,我不知道这个神秘的文件今天在哪里。【参考方案4】:删除空行:
sed '/^[[:space:]]*$/d'
【讨论】:
格伦,对不起。我是sed
的菜鸟。你能解释一下d
修饰符的作用吗?我用谷歌搜索没有结果:)以上是关于无法使用 sed 正则表达式删除空行的主要内容,如果未能解决你的问题,请参考以下文章
使用宏删除 VB.NET 代码中的所有注释和空行的 Visual Studio 正则表达式