在匹配前移除线路上的回车(使用sed、tr或awk)

在匹配前移除线路上的回车(使用sed、tr或awk),sed,awk,grep,tr,Sed,Awk,Grep,Tr,我正在寻找一种方法,在sed比赛之前删除线上的回车。例如,我希望在任何“[”实例之前删除回车符 样本输入: MESSAGE: Location latitude [-Pi/4,Pi/4] longitude [-Pi,Pi] altitude [10000,120000] 样本输出: MESSAGE: Location latitude [-Pi/4,Pi/4] longitude [-Pi,Pi] altitude [10000,120000] 任何使用sed、tr或awk的建议都将不胜感

我正在寻找一种方法,在sed比赛之前删除线上的回车。例如,我希望在任何“[”实例之前删除回车符

样本输入:

MESSAGE: Location
latitude
[-Pi/4,Pi/4]
longitude
[-Pi,Pi]
altitude
[10000,120000]
样本输出:

MESSAGE: Location
latitude [-Pi/4,Pi/4]
longitude [-Pi,Pi]
altitude [10000,120000]

任何使用sed、tr或awk的建议都将不胜感激。谢谢。

快速搜索本帖即可获得结果

用那篇文章的解决方案来解决你的问题,下面是答案:

sed':a;N;$!ba;s/\N\[/[/g'yourinput.txt

您可以使用Perl:

use warnings;
use strict; 

my $p; 

while (<>) {
  if (/^\[/) {
    chomp $p; 
    print "$p $_";
    undef $p;
  } else {
    print $p if defined $p; 
    $p = $_; 
  }
}
这可能适用于您(GNU-sed):

使用awk:

awk 'NR == 1 {previous = $0}
     NR > 1 && $0 ~  "^[[]" {previous = previous $0}
     NR > 1 && $0 !~ "^[[]" {print previous; previous = $0}
     END{print previous}' your_file.txt

因为我碰巧正在编写一个perl脚本,所以这个解决方案最适合我的需要。谢谢。
sed '$!N;s/\n\[/ [/;P;D' file
awk 'NR == 1 {previous = $0}
     NR > 1 && $0 ~  "^[[]" {previous = previous $0}
     NR > 1 && $0 !~ "^[[]" {print previous; previous = $0}
     END{print previous}' your_file.txt
#!/usr/bin/awk -f
BEGIN {
  RS = ""
}
{
  gsub(/\n\[/, " [")
}
1