Sle*_*der 4 replace sed substitution
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
Run Code Online (Sandbox Code Playgroud)
以上是我的数据文件。
里面有空行。
这些空行中没有空格或制表符。
我想删除数据中的所有空行。
我做了一个搜索删除空行使用 SED给出了完美的答案。
在此之前,我自己写了两段sed代码:
sed -r 's/\n\n+/\n/g' cou.data
sed 's/\n\n\n*/\n/g' cou.data
Run Code Online (Sandbox Code Playgroud)
我试过 awk gsub,也没有成功。
awk '{ gsub(/\n\n*/, "\n"); print }' cou.data
Run Code Online (Sandbox Code Playgroud)
但它们不起作用,也没有任何变化。
我的 sed 代码哪里做错了?
使用以下sed命令删除所有空行。
sed '/./!d' cou.data
Run Code Online (Sandbox Code Playgroud)
解释:
/./ 匹配任何字符,包括换行符。! 否定选择器,即它使命令应用于与选择器不匹配的行,在这种情况下是空行。d 删除选定的行。cou.data 是输入文件的路径。你哪里错了?
How sedWorks 中的以下摘录指出:
sed 通过对每一行输入执行以下循环来进行操作:首先,sed从输入流中读取一行,删除任何尾随的换行符,并将其放入模式空间。然后执行命令;每个命令都可以有一个与之关联的地址:地址是一种条件代码,只有在执行命令之前验证了条件时,才会执行命令。
当到达脚本末尾时,除非使用了 -n 选项,否则模式空间的内容将打印到输出流中,如果删除了尾随换行符,则将其添加回。8 然后下一个循环开始进行下一个输入线。
我有意加强了与您的sed示例不起作用的原因相关的部分。鉴于你的例子:
sed读取一行。\n\n并\n\n\n分别在第一和第二个例子),你正在试图匹配实际上并不存在。它们在执行正则表达式模式时已被删除,然后在到达脚本末尾时恢复。