如何在Linux上使用正则表达式查找文件中的信息

时间:2009-05-28 15:11:18

标签: regex linux shell scripting

我有一个包含许多行的文件。其中一个看起来像:

set auto_upgrade {1 2 3 4}

该列表可以包含更多数字。

现在,在shell脚本中,我想查看此文件并找出列表中的最后一个数字。在上面的例子中,它应该找到4.我有一个正则表达式来找到它:

set auto_upgrade {\([0-9] \)*\([0-9]\{1,\}\)}

第二组包含我需要的东西。 但是,我该如何使用这个正则表达式?我尝试了 sed ,但它返回带有替换的完整文件。我只想要第二组。

提前致谢, 巴特

3 个答案:

答案 0 :(得分:3)

首先,以安静模式启动sed:它不应该打印任何东西,除非被告知这样做(那是标志-n)。然后只有在进行了替换(即模式修饰符p

时才打印
sed -n 's/set auto_upgrade {\([0-9] \)*\([0-9]\{1,\}\)}/\2/p'

答案 1 :(得分:0)

这样的东西

cat filename | perl -pe的/^.*(\ d +)\} / $ 1 /'

应该有用。

答案 2 :(得分:0)

sed 's/.*\([0-9]\+\)}/\1/g' 

替换部分中的“\ 1”与该组匹配。即(忽略逃脱和引用)

sed s/pattern1(pattern2)/\1/g 

将返回pattern2的匹配部分