我还没有找到任何明确回答我的问题的东西。虽然很接近,我想......Linux Bash:从文件中提取文本int变量
我有一个行文件:
# Skipsdata for serienummer 1158
我想在年底提取的4位数字,并把它变成一个变量,这个数字从改变文件到文件,所以我不能只搜索“1158”。但是“#Skipsdata serienummer”始终保持不变。
我认为grep
,sed
或awk
可能是答案,但我不完全清楚它们的用法。
我还没有找到任何明确回答我的问题的东西。虽然很接近,我想......Linux Bash:从文件中提取文本int变量
我有一个行文件:
# Skipsdata for serienummer 1158
我想在年底提取的4位数字,并把它变成一个变量,这个数字从改变文件到文件,所以我不能只搜索“1158”。但是“#Skipsdata serienummer”始终保持不变。
我认为grep
,sed
或awk
可能是答案,但我不完全清楚它们的用法。
使用Awk
作为
numberRequired=$(awk '/# Skipsdata for serienummer/{print $NF}' file)
printf "%s\n" "$numberRequired"
1158
您可以使用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忘记以前匹配的部分,以便只打印之后的部分。
我不知道如何实现这个想法,文件中有许多其他线路与数字。我只是想找到这条线,并在最后拿到四位数字。 –
@RobbieAggas我想你读了我的答案的旧版本。对不起,首先发布该版本。 – Socowi
有多种方法可以找到你的电话号码。假设输入数据位于名为inputfile
的文件中:
mynumber=$(sed -n 's/# Skipsdata for serienummer //p' <inputfile)
将仅打印数字并忽略所有其他行;
mynumber=$(grep '^# Skipsdata for serienummer' inputfile | cut -d ' ' -f 5)
会先过滤相关线路,则仅输出第5场(数)
所以从什么youre说: mynumber的= $(grep '可以^#Skipsdata为serienummer' inputfile中|切-d '' -f 5) 回声将导致$ mynumber的 : 1158 –
权利和OP - 下一次显示你的目标线与其他线的上下文,并显示预期的输出,加上你已经尝试过。见[问]。 –
这将节省serienummer和1158之间的空白到变量? –
@RobbieAggas:你为什么需要他们之间的空白?这只是存储号码 – Inian