我在bash腳本中逐行讀取文本文件,目標是捕獲變量聲明。爲什麼這個正則表達式不能捕捉文件的最後一行?
的bash腳本:
#!/bin/bash
filePath=$1
while read line
do
if [[ $line =~ ^[[:blank:]]*([^#[:blank:]]+)[[:blank:]]*=[[:blank:]]*(.*) ]]
then
var=${BASH_REMATCH[1]}
value=${BASH_REMATCH[2]}
echo "$var=$value"
fi
done < "$filePath"
有了這個文本文件(注意,行 「C = 3」 是文件的最後一行):
# First variable
a=1
# Second variable
b = 2
# Third variable
c=3
輸出是:
a=1
b=2
但隨着這一個:
# First variable
a=1
# Second variable
b = 2
# Third variable
c=3
# empty line
的輸出是:
a=1
b=2
c=3
它可以是在最後一個空行,沒有必要評論。
有人可以解釋爲什麼最後一行不被第一個例子中的正則表達式捕獲嗎?我怎樣才能解決這個問題(除了在文本文件末尾添加空行......)?謝謝
請問您的第一個文件在結尾處斷行? (用'cat -A'測試,檢查行尾標記。)我懷疑它沒有。 –
如果這是問題,解決方案是http://stackoverflow.com/questions/12916352/shell-script-read-missing-last-line:'while read line || [[-n $ line]]' –
哇!就是這樣,你的解決方案完美無缺!非常感謝! – scandel