2013-05-17 45 views
1

在Linux(Cento OS)中,我有一個文件,其中包含一組我想要刪除的附加信息。我想生成一個包含所有字符的新文件,直到第一個|Linux cut字符串

該文件具有以下信息:

ALFA12345|7890 
Beta0-XPTO-2|30452|90 385|29 
ZETA2334423 435; 2|2|90dd5|dddd29|dqe3 

輸出預計將是:

ALFA12345 
Beta0 XPTO-2 
ZETA2334423 435; 2 

這是所有字符刪除字符後|(含)。

任何關於腳本的建議,其內容爲File1並生成File2滿足此特定要求?

回答

5

嘗試

cut -d'|' -f1 oldfile > newfile 
1

您可以使用一個簡單的sed腳本。

sed 's/^\([^|]*\).*/\1/g' in.dat 
ALFA12345 
Beta0-XPTO-2 
ZETA2334423 435; 2 

重定向到文件以捕獲輸出。

sed 's/^\([^|]*\).*/\1/g' in.dat > out.dat 
+1

刪除任何開頭|會使表達更簡單 – qdii

+3

同意qdii。 's/|。* //'' – Kevin

+0

這絕對是錯誤的方法。你匹配整行,但使用'g'標誌和捕獲組是過度殺傷。邏輯應該從'|'替換全部內容,而不是用我捕獲的第一行代替整行。 @ Kevin的評論包含正確的'sed'解決方案。 –

3

而且,爲了完善了 「三巨頭」,這裏的awk版本:

awk -F\| '{print $1}' in.dat 
+0

Big 3 ..'grep'呢? (+1) –

+0

@sudo_O是的,好的,snarkiness失敗......我們可能也可以在'perl','python','lua'等等中折騰......也許是「超級7」? 「開明11」? – twalberg

+0

哈哈爲什麼要在那裏停下來!我會說超級6'剪切,awk,sed,grep,perl,vi/emacs' –

0

而且隨着grep

$ grep -o '^[^|]*' file1 
ALFA12345 
Beta0-XPTO-2 
ZETA2334423 435; 2 

$ grep -o '^[^|]*' file1 > file2