我還沒有找到任何明確回答我的問題的東西。雖然很接近,我想......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