用空格替换\ n,但使用sed / tr保持\ r \ n

时间:2017-09-12 05:41:29

标签: bash sed

我的输入如下:

final <- df %>%
       group_by(group) %>%     
       nest() %>%                   
       mutate(data=map(data,~c(apply(.x,1,c)))) %>%  
       mutate(data=map(data,~graph(.x,directed=F))) %>%

我想制作

Line 1\n 
More Line 1\r\n
Line 2\n 
More Line 2\r\n

使用sed或tr。我尝试过以下操作但不起作用:

Line 1 More Line 1\r\n
Line 2 More Line 2\r\n

out_file仍然看起来像in_file。我也可以选择编写python脚本。

3 个答案:

答案 0 :(得分:2)

尝试:

sed '/[^\r]$/{N; s/\n/ /}' in_file

工作原理:

  • /[^\r]$/

    这仅选择的行在换行符之前具有回车符。大括号后面的命令仅对与此正则表达式匹配的行执行。

  • N

    对于那些选定的行,这会为其添加换行符,然后读入下一行并附加它。

  • s/\n/ /

    这会用空格替换不需要的换行符。

讨论

当sed一次读取一行时,但它不会在行后面的换行符中读取。因此,在下文中,\n永远不会匹配:

sed -e 's/([^\r])\n/ /g'

我们可以匹配[^\r]$,其中$表示行尾但仍然不包含\n

这就是上面使用N命令读取下一行的原因,在追加换行符后将其附加到模式空间。这使得换行符对我们可见,我们可以将其删除。

答案 1 :(得分:1)

试试这个:

tr '\n' ' ' < file | sed 's/\r/\r\n/g'

它将打印:

Line 1 More Line 1\r\n
Line 2 More Line 2\r\n

答案 2 :(得分:0)

awk 解决方案:

Line 1 More Line 1\r\n
Line 2 More Line 2\r\n

输出(字面意思):

brew install pygobject3