2016-12-06 26 views
0

我的文件有以下逗號分隔值刪除空格之後的任何直到逗號使用SED或AWK

dev.visualwebsiteoptimizer.com  80,versioncheck-bg.addons.mozilla.org 80,  ,frontweb-stg.shoprunner.com 443,p.typekit.net  443,sra.s-9.us 443,www.shoprunner.com  443,cdn.optimizely.com 443,logx.optimizely.com 443,sra.s-9.us 443,ocsp.digicert.com 443,code.jquery.com  443,ocsp2.globalsign.com  443,dev.visualwebsiteoptimizer.com 443,versioncheck-bg.addons.mozilla.org 443, , 

幾個地方我看空的空間,然後逗號

我想有以下輸出:

dev.visualwebsiteoptimizer.com,versioncheck-bg.addons.mozilla.org,,frontweb-stg.shoprunner.com,p.typekit.net,sra.s-9.us,www.shoprunner.com,cdn.optimizely.com,logx.optimizely.com,sra.s-9.us,ocsp.digicert.com,code.jquery.com,ocsp2.globalsign.com,dev.visualwebsiteoptimizer.com,versioncheck-bg.addons.mozilla.org,, 

理想我想刪除空格,直到我看到逗號,

我試過

sed -i 's/^[[:space:]]*,/,/g' sample.file 

但沒有什麼好看的。

任何幫助,將不勝感激

+0

你想刪除數字,例如'80'嗎? – dawg

+1

是的我只想看到url和沒有portnumbers。 –

+0

sed -i's/[[:space:]] [^,] *,/,/ g'這個解決方案適用於我,但是如果我的文件有AB c這樣的行,dev.visualwebsiteoptimizer.com 80,versioncheck -bg.addons.mozilla.org 80,我只想移除數字,但是這個解決方案對於所有值都是通用的,後面是空格,直到我試着用's/[[:space:]] [^ [[0-9] *],] *,/,/ g',我不確定,這裏有什麼問題。 –

回答

3

首先,^指行首。去掉它。其次,您似乎想要刪除每個空格和下面的逗號之間的所有非逗號,但是您沒有在模式中包括該逗號。

sed -i 's/[[:space:]][^,]*,/,/g' sample.file 
+0

感謝您的時間,這對我幫助不大。 我正在尋找刪除空格和空格後跟數字 –

+0

重新「*這都幫助了我*」,修正。 '*'偶然被遺漏了。 // Re「*我正在尋找刪除空格和空格後跟數字*」,如果問題不對,請修復它。 – ikegami

+0

非常感謝..你能解釋我嗎,這對我的理解會更有幫助。 –

1
awk '{gsub(/[ ]+/,"")gsub(/[0,3-8]/,"")}1' file 

第一GSUB消除空間和下一個帶走不必要的號碼。

+0

請詳細解釋非awk-masters – bibi

1

一個perl解決方案:

perl -i -pe 's/\s+\d*(?=,)//g' file 

Perl的啓動成本高於,比如說,桑達的或awk的,但Perl的更強大的正則表達式的支持往往使事情變得更加容易:

  • \s是匹配空格(tab,space,newline)的快捷方式;同樣,\d[0-9]的快捷方式。

  • +作爲一個或者更多情況下,重複的符號是始終可用,而使用它sed便攜你必須使用笨拙\{1,\}結構。

  • (?=...)是一個預見斷言,允許查找一個子表達式而不包含它在匹配中。