假设我有一个这样的文件:
adasfddfd09
dsassd90897
323sdsdsdsd
sdddsdf56
dfdf45fdfdf
Run Code Online (Sandbox Code Playgroud)
我只想搜索那些最后两个字符为数字的字符串sed
,grep
并且awk
。
看起来原始问题的格式不正确。因此,最简单的 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)
</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>
。