2009-11-22 89 views
2

任何人都可以解釋如何使用sed刪除所有字符到&,包括CSV文件中的第二個逗號嗎?sed腳本刪除所有字符,包括第二個逗號在一行

一個典型行的開頭可能看起來像

1234567890,ABC/DEF,和數字在第一列中的數字以隨機順序變化,即有可能是9個或10或11個獨立的數字和第二列中的字母也可以是隨機的。這種隨機性和變化的長度使得不可能使用任何明確的模式搜索。

回答

7

你可以使用sed這樣

sed -e 's/^\([^,]*,\)\{2\}//' 

不是100%肯定做它的語法,我試了一下,似乎工作,雖然。它會刪除零個或更多的任何東西 - 逗號後跟一個逗號,並且所有匹配的內容都會連續兩次匹配。

但更容易是使用切割,這樣

cut -d, -f3- 

將使用逗號作爲分隔符,並打印領域3以上。

編輯:
只是爲了記錄在案,無論sed和切割可以用文件作爲參數工作,只是將其追加在最後像這樣

cut -d, -f3- myfile.txt 

或者你可以管的輸出你的程序通過它們

./myprogram | cut -d, -f3- 
+0

如果您使用的GNU sed'你可以做'sed的-r 's/^([^,] *){2} //''這是對眼睛更容易一些。 – 2009-11-23 00:08:59

+0

@Dennis Williamson:是的,posix正則表達式似乎並沒有用於人類眼睛,除非是在尋找固定的字符串...... :) – falstro 2009-11-23 07:59:17

2

sed不是工具的「正確」選擇(雖然它可以完成)。既然你有結構化的數據,你可以使用fields/delimiter方法,而不是創建複雜的正則表達式。

您可以使用剪切

$ cut -f3- -d"," file 

或呆子

$ gawk -F"," '{$1=$2=""}1' file 
$ gawk -F"," '{for(i=3;i<NF;i++) printf "%s,",$i; print $NF}' file 
0

感謝所有答覆 - 的幫助提供我寫低於該不會是我想要的簡單可執行腳本。

#!/bin/bash 
cut -d, -f3- ~/Documents/forex_convert/input.csv | 
sed -e '1d' \ 
-e 's/-/,/g' \ 
-e 's/ /,/g' \ 
-e 's/:/,/g' \ 
-e 's/,D//g' > ~/Documents/forex_convert/converted_input 

exit 
相關問題