2017-10-10 88 views
1

我已經通過了所有的線程,但仍然找不到答案。如何使用sed刪除模式的最後幾個字符

例如。

我有格式的時間戳:YYYY-MM-DD HH:MM:ss.xxx

其中xxx表示毫秒。

我想擺脫xxx部分,請注意,此時間戳不在某個位置,因此我們不能將它作爲行尾或行尾的一部分(在unix命令或bash腳本中)

我能想到的方法是使用sed,但我所能做的只是獲取模式,但不知道該如何處理模式,似乎所有模式都是爲了找到行的模式本身。因此,我們通常可以考慮如下問題:如何使用sed刪除特定模式的最後幾個字母。

感謝您的閱讀。

注意,xxx可以是0-999,所以它可以是1,2,3位,樣本是這樣的:

asfd,asasfsf,afas,2017-10-20 13:22:22.0,333,222,0.002 
nyh,nyhny,nhy,2 23 4 23 32:23:14.czxv,2017-10-20 13:22:22.234,12.0,234.22 
nyh,nyhny,nhy,2017-10-20 13:22:22.234,12.0 
wn,rrwn,daff,2017-10-20 13:22:32.543,12,32 

我想到的是:

asfd,asasfsf,afas,2017-10-20 13:22:22,333,222,0.002 
nyh,nyhny,nhy,2 23 4 23 32:23:14.czxv,2017-10-20 13:22:22,12.0,234.22 
nyh,nyhny,nhy,2017-10-20 13:22:22,12.0 
wn,rrwn,daff,2017-10-20 13:22:32,12,32 
+0

歡迎來到堆棧溢出,是的,我們可以做到這一點,但你必須向我們展示示例輸入和代碼標籤中的預期輸出,請讓我知道你是否有任何疑問。 – RavinderSingh13

回答

0

這可能會實現(GNU sed):

sed 's/\(....-..-.. ..:..:..\)\..../\1/g' file 

這是非常懶惰但很可能會工作99%的時間。它與時間戳分隔符匹配,然後在最後刪除.xxx。如果你願意,你可以更具體,即

sed 's/\([0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\} [0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}\)\.[0-9]\{3\}/\1/g' file 

使用-r選項,刪除牙籤爛攤子:

sed -r 's/([0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2})\.[0-9]{3}/\1/g' file 
1

按照任擇議定書的顯示INPUT_FILE提出新的解決方案如下。

awk '{sub(/\.[^,]*/,"",$2)} 1' Input_file 

說明:添加的AWK代碼解釋也在這裏。

awk '{ 
sub(/\.[^,]*/,"",$2) ##sub is awk in-built utility, which will substitute on basis of sub(text/regex which we need to replace,"new_text"/variable_value,For a current line/variable/field), so in this case I am using a REGEX which will look from a DOT to first occurrence of comma(,) which I am substituting with NULL in 2nd field(your 2nd field is the one which is having timing details because awk has space as delimiter by default). 
} 
1     ##awk works on method of condition then action. So Here I am making condition TRUE by mentioning 1 and no action is mentioned so be default print action will happen. 
' Input_file 
+0

非常感謝,而在xxx部分之前,這是一個,而不是:和xxx可以是1-3位,所以xxx可以是0或999或它們之間的任何數字 – BeyondTryingToCode

+0

對不起,錯誤的分類。在xxx之前應該是。而不是, 但是不要擔心,我已經得到了你的代碼,並將其中的部分更改爲\。 ,而現在又出現了另一個問題,那就是它將刪除任何後跟.xxx的內容,包括那些不包含時間戳記模式的數據。 – BeyondTryingToCode

+0

@BeyondZhang,我認爲你顯示的輸出有錯字,你能檢查我編輯的awk代碼,並讓我知道這是否對你有幫助? – RavinderSingh13