搜索最后两个字符为数字的字符串

use*_*240 4 sed awk

假设我有一个这样的文件:

adasfddfd09
dsassd90897
323sdsdsdsd
sdddsdf56
dfdf45fdfdf
Run Code Online (Sandbox Code Playgroud)

我只想搜索那些最后两个字符为数字的字符串sedgrep并且awk

Spa*_*awk 6

grep 和 sed 命令

看起来原始问题的格式不正确。因此,最简单的 grep 和 sed 命令是:

egrep '[0-9]{2}$' /path/to/file
Run Code Online (Sandbox Code Playgroud)

sed -rn '/[0-9]{2}$/p' /path/to/file
Run Code Online (Sandbox Code Playgroud)

我将在下面留下解释,其中包括有关这些命令的信息,但也可以在单行上处理多个字符串。它们仍然可以工作,但包括额外的、可能无关的代码。


格雷普

grep '[^ ]*[0-9]\{2\}( |$)' /path/to/file
Run Code Online (Sandbox Code Playgroud)

解释

  • [^ ]* 匹配任意数量的非空格字符。
  • [0-9]\{2\}匹配两个数字。(你可以[0-9][0-9]改用。)
  • ( |$) 数字应该是“单词”的结尾,因此后面应该跟一个空格或行尾终止符。

我更喜欢使用扩展的 grep,因为您不需要转义花括号。因此,

grep -E '[^ ]*[0-9]{2}( |$)' /path/to/file
Run Code Online (Sandbox Code Playgroud)

或者

egrep '[^ ]*[0-9]{2}( |$)' /path/to/file
Run Code Online (Sandbox Code Playgroud)

问题已编辑,但如果一行中有多个匹配项,并且您只想输出匹配项,则使用该-o标志。IE

egrep -o '[^ ]*[0-9]{2}( |$)' /path/to/file
Run Code Online (Sandbox Code Playgroud)

sed

</path/to/file tr ' ' '\n' | sed -rn '/[0-9]{2}$/p'
Run Code Online (Sandbox Code Playgroud)

解释

  • </path/to/file tr ' ' '\n' 输入文件并将所有空格更改为换行符。
  • sed -rn使用扩展正则表达式(类似于上面的) with -r,并且不要立即用 打印所有输出-n
  • [0-9]{2}$此正则表达式类似于上面 grep 行中的正则表达式。但是,由于我们已经删除了所有空格,因此我们不需要在开头定义非空格字符,也不需要在结尾定义可能的空格。
  • /<regex>/p打印出匹配的行<regex>