2013-05-17 59 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