提取动态变化的字符串的最后一次出现

时间:2014-07-16 06:20:40

标签: string bash sed

我需要提取并设置一个变量,只显示在文本中出现一次或多次的最后一个数值,如下所示:

The http port is 4060

因此,为了仅检索4060的值,我在以下sed命令中得出结论:

sed -n -e "s/The http port is \([0-9]*\)/\1/p" file.txt

但是,由于此端口值可能会出现多次并且每次都有不同的值, 我需要每次只提取最后一次出现的数值,而且我没有找到一种方法与上面的sed命令结合使用

提前致谢

4 个答案:

答案 0 :(得分:1)

使用awk

可以轻松完成此操作
awk '/The http port is/ {f=$NF} END {print f}' file 

它将搜索The http port is,如果找到则将其存储在变量f中 当它完成文件后,它将打印f,它将始终具有最后找到的数据。


如果数据位于该行内的不同位置,您可以执行以下操作:

awk -F"The http port is " '{f=$2+0} END {print f}' file

答案 1 :(得分:0)

sed -n -e "s/The http port is \([0-9]*\)/\1/p" file.txt | tail -n 1

答案 2 :(得分:0)

grep与look-behind一起使用:

grep -oP '(?<=The http port is )[0-9]+' file | tail -n 1

有了它,短语可能出现在文件中的任何地方,甚至在字符串之间。

答案 3 :(得分:0)

这可能适合你(GNU sed):

sed '/The http port is \([0-9]*\)/h;$!d;x;s//\1/g' file

这将保存包含保留空间中http端口实例的最后一行,并在文件末尾交换保存该数据并检索该数字。