我有所有以時間戳記開頭的日誌文件,然後是日誌級別,然後是消息,我想要一個擺脫時間戳的腳本。Bash刪除每行之前的第一個空白的所有內容
也就是說,我想一個腳本,爲文件的每一行會變成:
21:22:34.571 DEBUG - some message
到
DEBUG - some message
我沒有使用bash的多,因此任何建議,將不勝感激。
我有所有以時間戳記開頭的日誌文件,然後是日誌級別,然後是消息,我想要一個擺脫時間戳的腳本。Bash刪除每行之前的第一個空白的所有內容
也就是說,我想一個腳本,爲文件的每一行會變成:
21:22:34.571 DEBUG - some message
到
DEBUG - some message
我沒有使用bash的多,因此任何建議,將不勝感激。
如果你可以用AWK:
awk '$1="";1' data_file_name
否則,使用shell(非常非常慢):
#!/bin/bash
while read -r line; do
printf '%s\n' "${line#* }"
done <"data_file_name"
請注意,'awk'腳本在輸出行上留下前導空白。 shell代碼在這方面是乾淨的。 –
@JonathanLeffler更糟的是,'awk'代碼通過賦值給'$ 1',導致'$ 0'通過在它們之間插入'OFS'來重新構造所有參數。它破壞了田野之間的白色空間分隔。 – Kaz
@Kaz有[這個答案與236完全相同的投票](http://stackoverflow.com/a/2961994/6843677)。如果你想要[保持空格使用這個(可能是選項4)](http:// stackoverflow。com/a/32774373/6843677),但這對於這個簡單的需求來說似乎太多了。 – sorontar
您可以嘗試要麼根據輸入數據sed
或cut
:
sed -e 's/^[0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}.[0-9]\{3\}//' <data_file_name>
cut -c 13- <data_file_name>
評論(嘲笑娛樂而不是更嚴重):在shell腳本中使用'
此外,使用'sed's/^ [^] * //''可能會更簡單 - 刪除所有非空白,直到包括第一個空白。你的腳本實際上並沒有刪除空白。 –
@JonathanLeffler在這兩種情況下你都是對的。問題是關於一個想法。我提出了兩個想法。沒有更多 – GMichael
grep
也可以通過簡單地提取每一個空間之後荷蘭國際集團
$ cat ip.txt
21:22:34.571 DEBUG - some message
21:23:34.571 DEBUG - some other message
這會留下一個空白領先
$ grep -o ' .*' ip.txt
DEBUG - some message
DEBUG - some other message
這不會
$ grep -oP ' \K.*' ip.txt
DEBUG - some message
DEBUG - some other message
'切-d'-f2- file.log' – anubhava
何時日期出現在日誌文件中 - 絕不會,或者僅在午夜之後或每小時或之後發佈第一條消息之前?這很重要,因爲如果日期行之前沒有時間戳(他們可能不應該是這樣),那麼你需要讓這些人獨自離開。使用'cut'或類似'sed's/^ [^] * //'的東西的機制變得不太合適 - 你需要對你的匹配更加嚴格。我會注意到將日期退出可能不是一個好主意,但那是你的問題,不是我的。 –
我試圖比較兩組日誌以找出它們之間有什麼不同,當它說由於時間戳每一行都不同時,很難做到這一點。 – annedroiid