使用sed删除文件中的空行

使用sed删除文件中的空行,sed,replace,substitution,Sed,Replace,Substitution,上面是我的数据文件 里面有空行 这些空行中没有空格或制表符 我想删除数据中的所有空行 我做了一次搜索,给出了完美的答案 在此之前,我自己编写了两个sed代码: France 211 55 Europe Japan 144 120 Asia Germany 96 61 Europe England 94 56 Europe Taiwan 55 144 Asia North Korea 44 2134 Asia 我试过awk gsub,也没有成功 sed -

上面是我的数据文件

里面有空行

这些空行中没有空格或制表符

我想删除数据中的所有空行

我做了一次搜索,给出了完美的答案

在此之前,我自己编写了两个sed代码:

France  211 55  Europe

Japan   144 120 Asia
Germany 96  61  Europe

England 94  56  Europe




Taiwan  55  144 Asia
North Korea 44  2134    Asia
我试过awk gsub,也没有成功

sed -r 's/\n\n+/\n/g' cou.data
sed 's/\n\n\n*/\n/g' cou.data
但它们不起作用,什么都不会改变


我的sed代码哪里做错了?

使用以下
sed
删除所有空行

sed'/./!d'cou数据
说明:

  • /./
    匹配任何字符,包括换行符
  • 否定选择器,即使命令应用于与选择器不匹配的行,在本例中为空行
  • d
    删除所选行
  • cou.data
    是输入文件的路径

你哪里出错了?

以下摘录自各国:

sed通过在每一行输入上执行以下循环来运行:首先,sed从输入流中读取一行,删除任何尾随换行符,并将其放置在模式空间中然后执行命令;每个命令都可以有一个与其关联的地址:地址是一种条件代码,只有在执行命令之前验证了条件,才能执行命令

当到达脚本结尾时,除非使用-n选项,否则模式空间的内容将打印到输出流,如果删除了尾随换行符。8然后下一个循环开始于下一个输入行

我故意为那些与您的
sed
示例不起作用的原因相关的部分壮胆。举个例子:

  • 他们似乎忽视了
    sed
    一次只读取一行
  • 您试图匹配的尾随换行符(
    \n\n
    \n\n\n
    分别在第一个和第二个示例中),实际上并不存在。在执行regexp模式时,它们已被删除,然后在脚本结束时恢复

默认情况下,大多数sed和awk实现的可能副本逐行工作,从输入中剥离换行符,并在打印时将其添加回。。因此,
\n
永远不会匹配,除非您使用sed/awk的其他功能使用多行代码。我建议:
grep。文件
这可能有助于
sed'/^$/d'数据
awk '{ gsub(/\n\n*/, "\n"); print }' cou.data