2017-02-14 57 views
0

我还没有找到任何明确回答我的问题的东西。虽然很接近,我想......Linux Bash:从文件中提取文本int变量

我有一个行文件:

# Skipsdata for serienummer 1158 

我想在年底提取的4位数字,并把它变成一个变量,这个数字从改变文件到文件,所以我不能只搜索“1158”。但是“#Skipsdata serienummer”始终保持不变。

我认为grepsedawk可能是答案,但我不完全清楚它们的用法。

回答

2

使用Awk作为

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

权利和OP - 下一次显示你的目标线与其他线的上下文,并显示预期的输出,加上你已经尝试过。见[问]。 –

+0

这将节省serienummer和1158之间的空白到变量? –

+0

@RobbieAggas:你为什么需要他们之间的空白?这只是存储号码 – Inian

2

您可以使用grep-o开关,该开关仅打印匹配的零件而不是整行。

打印的线条从文件末尾的所有数字yourFile

grep -Po '\d+$' yourFile 

打印在行结束所有四位数号码,如在你的问题描述:

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

-P使Perl的风格的正则表达式其中支持\d,特别是\K
\d匹配任何数字(0-9)。 \d{4}恰好匹配四位数字。
\K让grep忘记以前匹配的部分,以便只打印之后的部分。

+0

我不知道如何实现这个想法,文件中有许多其他线路与数字。我只是想找到这条线,并在最后拿到四位数字。 –

+0

@RobbieAggas我想你读了我的答案的旧版本。对不起,首先发布该版本。 – Socowi

0

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

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

mynumber=$(grep '^# Skipsdata for serienummer' inputfile | cut -d ' ' -f 5)会先过滤相关线路,则仅输出第5场(数)

+0

所以从什么youre说: mynumber的= $(grep '可以^#Skipsdata为serienummer' inputfile中|切-d '' -f 5) 回声将导致$ mynumber的 : 1158 –

相关问题