UNIX替换tr或sed中的字符序列

时间:2015-12-09 17:11:43

标签: sed tr

有一个错误创建的文件。文件中有多个以空格分隔的字段,但一个文本字段包含一些不需要的换行符。这引起了一个大问题。

如何删除这些字符但不删除所需的行?

文件是:

'Number field' 'Text field'                    'Number field'
   1            Some text                       999999
   2            more
text                             111111111
   3            Even more text                  8888888888
EOF

所以在"更多"。

之后有一个NL

我已尝试过sed:

sed 's/.$//g' test.txt > test.out

sed 's/\n//g' test.txt > test.out

但这些都不起作用。新行不会被删除。

tr -d '\n'做得太多了 - 我只需要删除前面有空格的换行符。

如何删除空格后面的换行符?

SunOS 5.10 Generic_144488-09 sun4u sparc SUNW,Sun-Fire-V440

3 个答案:

答案 0 :(得分:2)

sed解决方案

sed '/ $/{N;s/\n//}'

说明:

  • / $/:每当行在空格中结束时,
  • N:追加换行符和下一行输入,
  • s/\n//:删除换行符。

答案 1 :(得分:0)

  

如何删除空格后面的换行符?

如果您希望原始文件中的每个$' \n'替换为空格($' '),并且您知道某个字符(例如控制字符)未出现在该文件,然后可以使用sed和tr(按照您的要求)完成任务。例如,假设control-A是不在文件中的字符。为简单起见,我们还假设我们可以使用bash。然后,以下脚本应该完成这项工作:

#!/bin/bash
A=$'\01'
tr '\n' "$A" | sed "s/ $A/ /g" | tr "$A" '\n' 

答案 2 :(得分:0)

使用Perl可能最简单:

perl -p0 -e 's/ \n/ /g'

-0标志使Perl将整个文件读作一行。然后我们可以用通常的方式使用s替换。当然,您也可以添加-i选项来就地编辑文件。