2017-02-08 66 views
2

我有一個文本文件,這樣GSUB時間戳模式:慶典/ SED/AWK刪除或從文本文件

1/7/2017 12:53 DROP TABLE table1             
1/7/2017 12:53 SELECT 

1/7/2017 12:55 --UPDATE #dat_recency SET 
Select * from table 2 
into table 3; 

我想刪除所有的時間戳模式(M/D/YYYY HH:MMM/DD/YYYY HH:MM的,MM/D/YYYY HH:MMMM/DD/YYYY HH:MM )。我可以找到使用grep的模式,但無法弄清楚如何使用gsub。有什麼建議麼?

所需的輸出:

DROP TABLE table1             
SELECT 

--UPDATE #dat_recency SET 
Select * from table 2 
into table 3; 
+0

沒有perl的使用。在一個窗口框中,我實際上使用了git附帶的bash編輯器。 – screechOwl

回答

3

您可以使用此命令sed從行開始刪除數據/時間戳:

sed -i.bak -E 's~([0-9]{1,2}/){2}[0-9]{4} [0-9]{2}:[0-9]{2} *~~' file 

cat file 

DROP TABLE table1 
SELECT 

--UPDATE #dat_recency SET 
Select * from table 2 
into table 3; 
+0

也許更短'sed -E's〜([0-9] {1,2} /){2} [0-9] {4} [0- 9] {2}:[0-9] {2} * ~~'' – SLePort

+1

是的,它會更加簡潔 – anubhava

2

使用默認的空間分隔,使第一和第二列空字符串,然後打印整條生產線。

awk '/^[0-9]/{$1=$2="";gsub(/^[ \t]+|[ \t]+$/, "")} !/^[0-9]/{print}' sample.csv 

該命令檢查每行是否以數字開頭,如果是用空字符串替換前兩列並刪除前導空格;否則打印原始行。

輸出:

DROP TABLE table1 
SELECT 

--UPDATE #dat_recency SET 
Select * from table 2 
into table 3; 
+1

這不會實現OP的期望輸出。它留下了領先的空間,並且在最後兩行上將'Select'和'into'撬開。 –

+0

@Jordan感謝您的評論。 OP修改了他的問題,沒有查詢。我已經更新了我對最新問題的回答 – haifzhan

+0

看起來不錯。 (爲了記錄,downvote不是我的。) –