假设我有一个这样的文件:
adasfddfd09
dsassd90897
323sdsdsdsd
sdddsdf56
dfdf45fdfdf
我只想搜索最后两个字符数字为sed
,grep
和 的字符串awk
。
答案1
grep 和 sed 命令
看来原始问题的格式不正确。因此,最简单的 grep 和 sed 命令是:
egrep '[0-9]{2}$' /path/to/file
和
sed -rn '/[0-9]{2}$/p' /path/to/file
我将在下面留下解释,其中包括有关这些命令的信息,但也可以在单行上处理多个字符串。它们仍然可以工作,但包含额外的、可能无关的代码。
格雷普
grep '[^ ]*[0-9]\{2\}( |$)' /path/to/file
解释
[^ ]*
匹配任意数量的非空格字符。[0-9]\{2\}
匹配两个数字。 (你可以用[0-9][0-9]
它代替。)( |$)
数字应该是“单词”的结尾,因此后面应该跟一个空格或行尾终止符。
我更喜欢使用扩展 grep,因为您不需要转义花括号。因此,
grep -E '[^ ]*[0-9]{2}( |$)' /path/to/file
或者
egrep '[^ ]*[0-9]{2}( |$)' /path/to/file
该问题已被编辑,但如果一行中有多个匹配项,并且您只想输出匹配项,则使用该-o
标志。 IE
egrep -o '[^ ]*[0-9]{2}( |$)' /path/to/file
塞德
</path/to/file tr ' ' '\n' | sed -rn '/[0-9]{2}$/p'
解释
</path/to/file tr ' ' '\n'
输入文件并将所有空格更改为换行符。sed -rn
将扩展正则表达式(类似于上面)与 一起使用-r
,并且不要立即用 打印所有输出-n
。[0-9]{2}$
该正则表达式与上面 grep 行中的正则表达式类似。但是,由于我们已经删除了所有空格,因此我们不需要在开头定义非空格字符,也不需要在结尾定义可能的空格。/<regex>/p
打印出匹配的行<regex>
。
答案2
sed
plusawk
应该可以解决问题!
sed 's/ /\n/g' file1 | awk '/[0-9][0-9]$/'
如果你的文件包含这些字符串逐行 awk
只应该做到这一点!
awk '/[0-9][0-9]$/' file1
如果你想要匹配以结尾的字符串正好两个数字和不多,然后改用这些命令:
sed 's/ /\n/g' file1 | awk '/[^0-9][0-9][0-9]$/'
和
awk '/[^0-9][0-9][0-9]$/' file1
输出:
adasfddfd09
dsassd90897
sdddsdf56
解释
sed
将输入字符串拆分为多个字符串。awk
匹配所有以两个数字结尾的字符串。