提取圆括号内的整数

提取圆括号内的整数

我有一个文件,其中包含电影名称及其发行年份的列表。我想列出所有发布年份。具体来说,我的文件如下所示

TDKR(2012)    
Vicky Cristina Barcelona (2008)  
...

我尝试用正则表达式 grep 如下

grep "^.*\\([0-9]*\\)$" movie.txt

它有效,但它正在打印整行,我只想要几年。我可以用 来做吗grep

答案1

GNU grep 支持一个-o选项,该选项将为您提供匹配模式,因此您可以使用,grep -o '([0-9]\+)'但这也会打印括号。不过,为了获得更大的灵活性和可移植性,您应该使用以下命令进行后处理sed

grep '([0-9]\+)$' movie.txt | sed 's/.*(\([0-9]\+\))$/\1/'
# assumes that the year is always at the end of the line.

答案2

如果数字始终是最后一个字段,那么您可以使用单个 awk 命令来完成。

bash$ awk '{gsub(/\(|\)/," "); print $NF};' $file
2012
2008
...

答案3

使用 Perl:

perl -lne 'print for /\((\d+)\)/g'

相关内容