2017-02-14 108 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 –