使用sed删除文件中的换行符和空格序列

时间:2016-05-18 14:27:50

标签: replace sed cmd

我有一个file,其中包含我想删除的不需要的换行符和空格序列。实际文件大约有100万行,这只是为了提供一个可重现的例子。

我可以grep这样的违规行:

grep -ciP "\n\n {6,}" problem.rpt

它正确返回

## 3

所以我尝试用sed替换字符串:

sed "s/\n\n {6,}//g" problem.rpt > prob2.rpt

但是我没有删除序列"\n\n {6,}",而是"\r\n\r\n {6,}"(它在每个LF之前引入了CR ,而不删除它或6+空格)。

我在Windows 8.1 sed中使用GNU grepcmd

我做错了什么,接近这份工作的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

以下其中一项对您有帮助吗?第二个很可能就是你要找的东西:

awk -v RS="\n\n {6,}" '7' problem.rpt

awk -v RS="\n\n {6,}" -v ORS="" '7' problem.rpt

我觉得你也有傻瓜,对吧?

我没有窗户为你测试......

答案 1 :(得分:0)

sed单行列表中我发现了一个解决了我的问题的命令:

sed -e :a -e "$!N; s/\n //;ta" -e "P;D" problem.rpt > prob2.rpt

然后,尝试破译命令,这就是我找到的here(逐字复制):

sed ':a;  $!N;  s/\n/string/;  ta'
     ---  ----  -------------  --
      |     |        |          |--> go back (`t`) to `a`
      |     |        |-------------> substitute newlines with `string`
      |     |----------------------> If this is not the last line (`$!`), append the 
      |                              next line to the pattern space.
      |----------------------------> Create the label `a`.

我仍然不知道P;D部分的作用,如果有知识的人编辑此答案,我会很感激。