这是 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
会打印出带有问号的白色椭圆。
最佳答案
sed
或 Unix 的 tr
命令的经典工作。
sed 's/[^0-9]//g' $file
(任何不是数字或换行符的内容都将被删除。)
tr -cd '0-9\012' < $file > $file.1
删除(-d
)数字和换行符的补码(-c
)...
关于regex - 如何从文件中删除非数字垃圾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5859628/