以下是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
会打印带有问号的白色椭圆。
答案 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
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;。* $ //”文件