grep 和 sed 命令

grep 和 sed 命令

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

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

sedplusawk应该可以解决问题!

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匹配所有以两个数字结尾的字符串。

相关内容