【发布时间】:2012-01-06 06:28:55
【问题描述】:
我需要一个使用 sed、awk 或 perl 的单行来从我的数据文件中删除空白行。我文件中的数据如下所示 -
Aamir
Ravi
Arun
Rampaul
Pankaj
Amit
Bianca
这些空白在我的数据文件中随机并且出现在任何地方。有人可以建议一个单行从我的数据集中删除这些空白行。
【问题讨论】:
我需要一个使用 sed、awk 或 perl 的单行来从我的数据文件中删除空白行。我文件中的数据如下所示 -
Aamir
Ravi
Arun
Rampaul
Pankaj
Amit
Bianca
这些空白在我的数据文件中随机并且出现在任何地方。有人可以建议一个单行从我的数据集中删除这些空白行。
【问题讨论】:
对于 perl,它与 sed、awk 或 grep 一样简单。
$ cat tmp/tmpfile 阿米尔 拉维
阿伦
朗保尔 潘卡伊
阿米特
比安卡
$ perl -i -pe 's{^\s*\n$}{}' tmp/tmpfile
$ cat tmp/tmpfile 阿米尔 拉维 阿伦 朗保尔 潘卡伊 阿米特 比安卡
【讨论】:
Perl 解决方案:
perl -ni.old -e 'print unless /^\s*$/' file
...创建原始文件的备份副本,后缀为'.old'
【讨论】:
Perl 解决方案。从命令行。
$ perl -i.bak -n -e'print if /\S/' INPUT_FILE
就地编辑文件并创建原始文件的备份。
【讨论】:
.bak,这将在没有备份的情况下就地编辑。
AWK 解决方案:
这里我们遍历输入文件以检查它们是否设置了任何字段。 NF 是 AWK 的内置变量,设置为字段数。如果该行为空,则不设置 NF。在这一行中,我们测试 NF 是否为真,即设置为一个值。如果是,那么我们打印该行,当模式为真时,这在 AWK 中是隐含的。
awk 'NF' INPUT_FILE
SED 解决方案:
此解决方案类似于作为答案提到的解决方案。正如语法所示,我们没有打印任何空白行。
sed -n '/^$/!p' INPUT_FILE
【讨论】:
你可以这样做:
sed -i.bak '/^$/d' file
【讨论】:
它可以通过多种方式完成。
例如使用 awk:
awk '$0' yourFile
或 sed:
sed '/^$/d' yourFile
或grep:
grep -v '^$' yourFile
【讨论】: