使用grep查找一行中的最后一项


13

我正在尝试使用grep将最后一个单词或短语用于特定模式。在此示例中,它是从最后一个逗号到行尾的:

Blah,3,33,56,5,Foo 30,,,,,,,3,Great Value

因此该行的期望输出将是“超值”。所有行的长度也不同,但是在最后一个单词之前总是有一个逗号。

基本上,我只想从最后一个逗号输出到行尾。谢谢!


9
您考虑过使用awk -F, '{print $NF}'吗?
steeldriver '17

获取行中的最后一项很容易,但是应该如何识别该行呢?我的意思是,命令或脚本如何看待这一行,然后说“是的,那就是那个”?识别该线的模式是什么?
Sergiy Kolodyazhnyy

5
grep不是这项工作的工具。
Kusalananda

Answers:


27

这里:

grep -o '[^,]\+$'
  • [^,]\+匹配不在,行($)末尾的一个或多个字符

  • -o 仅打印匹配的部分

例:

% grep -o '[^,]\+$' <<<'Blah,3,33,56,5,Foo 30,,,,,,,3,Great Value'
Great Value

像魅力一样工作!我试图使用“。”的组合。和其他表达式,但效果更好,非常感谢。
reversebottle

嗯,我会用过-Eo然后不需要逃脱了+
Baldrickk

@Baldrickk -E启用ERE,这就是原因。
heemayl

@heemayl是的,我知道为什么。我倾向于使用它,因为它是更常见的正则表达式语法
Baldrickk

15

总是喜欢看到一个awk解决方案,所以这里是(赞成正确的解决方案!):

% awk -F, '{print $NF}'  <<<'Blah,3,33,56,5,Foo 30,,,,,,,3,Great Value'
Great Value

3
这应该是正确的答案。虽然可以使用grep,但也可以用锤子拧螺丝。
wilsotc
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.