Linux Bash:从文件int变量中提取文本

时间:2017-02-14 18:58:56

标签: linux bash awk sed grep

我还没有发现任何明确回答我问题的内容。虽然非常接近,但我认为......

我有一行文件:

# Skipsdata for serienummer 1158

我想在最后提取4位数字并将其放入变量中,这个数字会因文件而异,因此我无法搜索" 1158"。但是" #Skipsdata for serienummer"总是保持不变。

我认为grepsedawk可能是答案,但我并未100%明确其用法。

3 个答案:

答案 0 :(得分:2)

您可以将grep-o开关一起使用,该开关仅打印匹配的部分而不是整行。

打印文件yourFile

中行尾的所有数字
grep -Po '\d+$' yourFile

打印行末尾的所有四位数字,如问题中所述:

grep -Po '^# Skipsdata for serienummer \K\d{4}$' yourFile

-P启用支持\d,特别是\K的perl样式正则表达式。
\d匹配任何数字(0-9)。 \d{4}恰好匹配四位数 \K让grep忘记之前匹配的部分,这样只会打印之后的部分。

答案 1 :(得分:2)

使用Awk作为

numberRequired=$(awk '/# Skipsdata for serienummer/{print $NF}' file)
printf "%s\n" "$numberRequired"
1158

答案 2 :(得分:0)

有多种方法可以找到您的号码。假设输入数据位于名为inputfile的文件中:

mynumber=$(sed -n 's/# Skipsdata for serienummer //p' <inputfile)将只打印数字并忽略所有其他行;

mynumber=$(grep '^# Skipsdata for serienummer' inputfile | cut -d ' ' -f 5)将首先过滤相关行,然后仅输出第5个字段(数字)