私はbashスクリプトで行ごとにテキストファイルを読みましたが、目的は変数の宣言をキャッチすることです。この正規表現がファイルの最後の行をキャッチしていないのはなぜですか?
bashスクリプト:
は# First variable
a=1
# Second variable
b = 2
# Third variable
c=3
出力は次のとおりです:
このテキストファイルで#!/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" は、ファイルの最後の行であることに注意してください)
a=1
b=2
しかし、このいずれかで:
# First variable
a=1
# Second variable
b = 2
# Third variable
c=3
# empty line
出力は次のようになります。
a=1
b=2
c=3
それは終わりに空行ではなく、必要に応じてコメントすることができます。
最後の行は、最初の例では正規表現でcatchedされていない理由を誰かが説明できますか?そして、どうすれば問題を解決できますか?(テキストファイルの最後に空白行を追加することを除いて...)?おかげwhile read line; do ... ; done
あなたのファイルのための
あなたの最初のファイルの最後に改行を持っていますか? ( 'cat -A'でテストし、行末のマーカーを確認してください。)そうではないと思います。 –
これが問題であれば、解決策はhttp://stackoverflow.com/questions/12916352/shell-script-read-missing-last-line: 'while read line || [[-n $ line]] ' –
うわー!これはそれで、あなたのソリューションは完璧に動作します!どうもありがとうございます! – scandel