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

标签 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 会打印出带有问号的白色椭圆。

最佳答案

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/

相关文章:

javascript - 使用 Regex 和 Javascript 从字符串中获取基本 url

bash - 如何删除 jq 输出中的双引号以在 bash 中解析 json 文件?

linux - 有一个更好的方法吗?巴什

MySQL 从文本字段中提取单个单词

c - qsort 结构 c

python - 使用 Python 在文本文件中查找和替换

c++ - 在 libc++ 上,为什么 regex_match ("tournament", regex ("tour|to|tournament")) 失败?

c# - .Net Regex for Comma Separated string with a strict format

regex - Powershell正则表达式替换两个相同字符之间的特定字符

string - 找到模式并将其移至行尾