我需要提取并设置一个变量,只显示在文本中出现一次或多次的最后一个数值,如下所示:
The http port is 4060
因此,为了仅检索4060
的值,我在以下sed
命令中得出结论:
sed -n -e "s/The http port is \([0-9]*\)/\1/p" file.txt
但是,由于此端口值可能会出现多次并且每次都有不同的值, 我需要每次只提取最后一次出现的数值,而且我没有找到一种方法与上面的sed命令结合使用
提前致谢
答案 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端口实例的最后一行,并在文件末尾交换保存该数据并检索该数字。