2011-06-13 68 views
2

包围多个字符我有以下内容的文件:SED删除由数字

EMAIL|TESTNUMBER|DATE 

[email protected]|123456789|2011-02-08T16:36:02Z 

如何删除大写字母的日期和时间,Z之间T在使用sed行的结束?

谢谢!

回答

3

如果格式是固定的,每行总是匹配牛逼\ d \ d:\ d \ d:\ d \ DZ,那么你可以尝试简单:

 
$ sed 's/T\(..:..:..\)Z$/ \1/' 

(未经测试)

0

猫它通过:

sed 's/\([0-9]+\)T\([0-9]+\)/\1\2//' | sed 's/Z$//' 

编辑 噢,我的!我刚刚意识到(谢谢@Fredrik)很长一段时间我浪费了流程!对我感到羞耻!现在我是一个过程的教会转换。这里是上面的祝福版本憎恶oneliner:

sed 's/\([0-9]+\)T\([0-9]+\)/\1\2//; s/Z$//' the_file.txt 
+0

不需要管道。您始终可以这样做:sed -e cmd1 -e cmd2,它相当于sed cmd1 | sed cmd2 – 2011-06-13 12:58:00

+0

@William Pursell:酷:)我会在下次考虑它。 – Rajish 2011-06-13 13:02:08

+0

请做,否则人们会开始扔在你这http://partmaps.org/era/unix/award.html ;-) – 2011-06-13 21:32:57

0

也许有一个华丽的方式,但下面的脚本为我工作:

s/\(....-..-..\)T\(.*\)/\1 \2/ 

s/Z$// 

比如...在绑定文件:

[email protected]|123456789|2011-02-08A16:36:02X 
[email protected]|123456789|2011-02-08T16:36:02Z 
[email protected]|123456789|2011-02-08B16:36:02Y 

输出:

D:\>sed -f sedscr testfile 

[email protected]|123456789|2011-02-08A16:36:02X 
[email protected]|123456789|2011-02-08 16:36:02 
[email protected]|123456789|2011-02-08B16:36:02Y