如何从文件中删除非数字垃圾

时间:2011-05-02 16:25:14

标签: regex bash text sed

以下是less的输出:

487451
487450<A3><BA>1<A3><BA>1
487449<A3><BA>1<A3><BA>1
487448<A3><BA>1<A3><BA>1
487447<A3><BA>1<A3><BA>1
487446<A3><BA>1<A3><BA>1
487445<A3><BA>1<A3><BA>1
484300<A3><BA>1<A3><BA>1
484299<A3><BA>1<A3><BA>1
484297<A3><BA>1<A3><BA>1
484296<A3><BA>1<A3><BA>1
484295<A3><BA>1<A3><BA>1
484294<A3><BA>1<A3><BA>1
484293<A3><BA>1<A3><BA>1
483496
483495
483494
483493
483492
483491

我在这里看到一堆不可打印的字符。如何使用sed / tr删除它们?

我的尝试是's/\([0-9][0-9]*\)/\1/g',但它不起作用。

编辑:好的,让我们进一步了解消息来源。这些数字是从这个文件中提取的:

487451"><img src="Manage/pic/20100901/Adidas running-429.JPG" alt="Adidas running-429" height="120" border="0" class="BK01" onload='javascript:if(this.width>160){this.width=160}' /></a></td>
487450"><img src="Manage/pic/20100901/Adidas fs 1<A3><BA>1-060.JPG" alt="Adidas fs 1<A3><BA>1-060" height="120" border="0" class="BK01" onload='javascript:if(this.width>160){this.width=160}' /></a></td>

第一行完全正常,大多数行都是正常的。第二个是“腐败”。我只想在开头提取数字(使用's/\([0-9][0-9]*\).*/\1/g',但不知何故非法包进入正则表达式,应该停在"

EDIT II :以下是澄清:文本文件中没有括号。这些是非打印字符的字符代码。括号是因为我从less复制了文件。另一方面,Mac的终端使用??来表示这些字符。我打赌我的Ubuntu xterm会打印带有问号的白色椭圆。

5 个答案:

答案 0 :(得分:7)

sed或Unix tr命令的经典作业。

sed 's/[^0-9]//g' $file

(任何不是数字或换行符的内容都会被删除。)

tr -cd '0-9\012' < $file > $file.1

删除(-d)数字和换行符的补语(-c)......

答案 1 :(得分:2)

你错过了匹配其余部分的位置。

sed 's/\([0-9][0-9]*\)[^0-9]*/\1/g' 
                      ^^^^^^^

答案 2 :(得分:0)

如果您知道废话总是在括号内,为什么不删除那个废话?

sed 's/<[^>]*>//g'
编辑:谢谢,迈克有道理。在那种情况下,如何:

sed 's/([0-9]+).*/\1/g'

答案 3 :(得分:0)

尝试使用此sed命令:

sed 's/^\([0-9][0-9]*\).*$/\1/' file.txt

OUTPUT(在您提供的输入文件上运行命令)

487451
487450
487449
487448
487447
487446
487445
484300
484299
484297
484296
484295
484294
484293
483496
483495
483494
483493
483492
483491

答案 4 :(得分:-2)

如果数据总是像样本一样,从行的小于到末尾删除将正常工作。     sed -i“s /&lt;。* $ //”文件