如何在匹配字符串后删除换行符直到linux中的下一个匹配?

时间:2015-10-15 18:59:33

标签: regex linux awk sed

嗨,感谢提前阅读,也许可以帮助我。 我有一个类似于下面的示例的日志,我希望ID,时间和日期中的所有文本都在一行中,直到下一个id,时间和日期。我试过一些例子,但还没找到合适的例子...... 这是文字。它在latin1我认为这就是为什么它看起来很有趣。

1334361 05:35:47 15-10-15  Talgrupp : Sk�n RAPS-03
                           Adr : Burl�vsbadet
                           Ort : 
                           Omr : M170
                           Kommun : Burl�v


                           Brand ute - fordon
                           Personbil
                           �vrigt

                           Till�ggsinfo : 
                           �rende Id : 2
                            A
1334361 05:36:47 15-10-15  Talgrupp : Sk�n RAPS-03
                           Adr : Burl�vsbadet
                           Ort : 
                           Omr : M170
                           Kommun : Burl�v


                           Brand ute - fordon
                           Personbil
                           �vrigt

                           Till�ggsinfo : 
                           �rende Id : 2
                           P`
0742963 09:12:14 15-10-15  �nr : 5738690
                           VG�t RAPS-32
                           Trafikolycka - flera fordon
                           Personbil


                           LV 200
                           Ort : 
                           Sk�vde
                           RAPS 32
                           X=6494376 Y=1395320
                           Nyckel : 
                           Omfattning : L�g

4 个答案:

答案 0 :(得分:0)

用awk:

awk '/^[0-9]+/ && NR>1 {print ""}; END {print ""}; {$1=$1; printf "%s", $0}' file 

打印每行不带换行符,对于以数字开头的行和最后一行后的行,打印换行符。我添加$1=$1强制awk使用输出字段分隔符重写行,默认情况下是一个空格。

1334361 05:35:47 15-10-15 Talgrupp : Sk�n RAPS-03Adr : Burl�vsbadetOrt :Omr : M170Kommun : Burl�vBrand ute - fordonPersonbil�vrigtTill�ggsinfo :�rende Id : 2A
1334361 05:36:47 15-10-15 Talgrupp : Sk�n RAPS-03Adr : Burl�vsbadetOrt :Omr : M170Kommun : Burl�vBrand ute - fordonPersonbil�vrigtTill�ggsinfo :�rende Id : 2P`
0742963 09:12:14 15-10-15 �nr : 5738690VG�t RAPS-32Trafikolycka - flera fordonPersonbilLV 200Ort :Sk�vdeRAPS 32X=6494376 Y=1395320Nyckel :Omfattning : L�g

答案 1 :(得分:0)

如果你有权访问正则表达式,就像这样 (?m)(?:\r?\n|\r)^\s+(?=[^\S\r\n])

修改这个(?:\r?\n|\r)\s+(?=[^\S\r\n])做同样的事情。

会导致此

1334361 05:35:47 15-10-15  Talgrupp : Sk�n RAPS-03 Adr : Burl�vsbadet Ort :  Omr : M170 Kommun : Burl�v Brand ute - fordon Personbil �vrigt Till�ggsinfo :  �rende Id : 2 A
1334361 05:36:47 15-10-15  Talgrupp : Sk�n RAPS-03 Adr : Burl�vsbadet Ort :  Omr : M170 Kommun : Burl�v Brand ute - fordon Personbil �vrigt Till�ggsinfo :  �rende Id : 2 P`
0742963 09:12:14 15-10-15  �nr : 5738690 VG�t RAPS-32 Trafikolycka - flera fordon Personbil LV 200 Ort :  Sk�vde RAPS 32 X=6494376 Y=1395320 Nyckel :  Omfattning : L�g

答案 2 :(得分:0)

我无法得到任何答案来做我想要的事情。所以我必须这样做,因为我的老师总是告诉我们,向前迈出一小步,直到你解决它。它成了一个最终解决它的bash脚本。也许其他人需要它,所以我在这里发布。基本的东西,但有效。

#!/bin/bash
# Filvariabel
cd /medianas/html
fil="extra.flt"
# Tar bort tomma rader
if [ -f ${fil} ]  
    then
    grep -v '^\s*$' $fil > $fil.test
    # Tar bort linefeed
    tr '\r\n' ' ' < $fil.test > $fil.labb
    # Tar bort alla space och ersätter med en space
    tr -s " " < $fil.labb > $fil.test
    sed 's/\ [0-9][0-9][0-9][0-9][0-9][0-9][0-9]/\n&/g' $fil.test >     $fil.klar
    # Tar bort tmpfiler och original
    rm $fil.test
    rm $fil.labb
    [[ -f $fil ]] && rm $fil
    # Tar bort inledande blank per rad
    sed -i 's/^ *//' $fil.klar
fi
/home/stefan/larm/fltmap-radio2.py &> /dev/null

答案 3 :(得分:0)

这个bashscript为我做了伎俩。也许可以帮助别人。

#top-bar