2015-10-15 47 views
-1

嗨和感謝提前閱讀,也許幫助我。 我有一個類似於下面的例子的日誌,我希望所有來自id,時間和日期的文本都在一行中,直到下一個id,時間和日期。我試過一些例子,但沒有找到正確的一個...... 這是文字。拉丁文1我認爲這就是爲什麼它看起來很有趣。如何在匹配字符串之後刪除換行直到下一次在Linux中匹配?

 
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 

回答

0

這個bashscript爲我做了詭計。也許可以幫助別人。

#!/bin/bash 
# Filvariabel 
cd /medianas/html 
fil="/medianas/html/extra.flt" 
logfil="/medianas/html/fltlog/extra.flt.hist" 
originalfil="/medianas/html/fltlog/extra.flt.orig" 
pocfil="/medianas/html/pocsaglog.flt" 
pocbak="/medianas/html/fltlog/pocsaglog.bak.flt" 

[[ -f pocsaglog.flt ]] && sed -i 's/nr :.[0-9][0-9][0-9][0-9][0-9][0- 9][0-9]//' ${pocfil} 

# Replace Pos: with X= 
[[ -f ${fil} ]] && sed -i 's/Pos: /X=/g' ${fil} 
# Replace ,_ followed by 7 numbers, with Y= 
[[ -f ${fil} ]] && sed -i 's/\(, \)\([0-9][0-9][0-9][0-9][0-9][0-9][0-9]\)/ Y=\2/g' ${fil} 
# Add NN to numbers in id 
[[ -f ${fil} ]] && sed -i 's/\(Mapp Id : \)\([0-9][0-9][0-9][0-9][0- 9][0-9][0-9]\)/NN\2/g' ${fil} 
[[ -f ${fil} ]] && sed -i 's/\(nr : \)\([0-9][0-9][0-9][0-9][0-9][0- 9][0-9]\)//g' ${fil} 

[[ -f $fil ]] && cat $fil >> $originalfil 
# Deletes empty rows 
if [ -f ${fil} ] 
then 
grep -v '^\s*$' ${fil} > ${fil}.test 
# Delete linefeeds 
tr '\r\n' ' ' < $fil.test > $fil.labb 
# Deletes all spaces and replace with one space 
tr -s " " < ${fil}.labb > ${fil}.test 
[[ -f ${fil}.test ]] && sed -i '/F*rlarm/d' ${fil}.test 
# Take away Änr: and seven numbers 
sed -i 's/?nr:.[0-9][0-9][0-9][0-9][0-9][0-9][0-9]//' ${fil}.test 
# Make blank line before pocnr 
sed -i 's/\ [0-9][0-9][0-9][0-9][0-9][0-9][0-9]/\n&/g' ${fil}.test 
# Delete tmpfiles and original 
[[ -f ${fil} ]] && rm ${fil} 
# Delete space where line starts with it. 
sed -i 's/^ *//' ${fil}.test 
[[ -f $fil.test ]] && cat $fil.test >> $logfil 
# [[ -f ${fil}.test ]] && rm ${fil}.test 
fi 
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 
+0

謝謝!線條上還有很多空間,但有一些東西需要注意。 –

+0

我想要空白的白色空間。只留下一個空間。 –

+0

解答已更新。 –

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 
+0

謝謝!看起來非常有保證。你能給我一個例子在python或bash如何使用它的文本文件?我試過一些例子,但不能得到它的工作。我可以以某種方式在論壇上附上文本文件嗎? –

+0

@StefanRydberg - 我想你可以鏈接到一個文本文件,不知道你是否可以在這裏附上一個。我不是很瞭解Python,或者是什麼正則表達式引擎bash使用的。但是,你可以嘗試這個'(?:\ r?\ n | \ r)\ s +(?= [^ \ S \ r \ n])'看看它是否有效。我剛剛拿出了多行修飾符'(?m)'和行結構'^'的開頭。它做同樣的事情。 – sln

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 
相關問題