2015-08-03 164 views
0

我想使用的代碼找到正則表達式

echo "enter file path" 
read upfile 
chkregex="REGEX\s+WITH\s+\/(.*)\/" 
while read line ; 
do 
if [[ $line =~ $chkregex ]]; 
then 

echo "${BASH_REMATCH[1]}" >>ct.txt 
fi 
done<$upfile 

喜歡讓我的文件中的數據來提取我的文件中的正則表達式得到錯誤有類似

REGEX WITH /^\s*COPY\s+pickled\_test\_license\s+\(id\,\s+report\_i/ 

使正則表達式的部分應被提取。 但是當我運行我得到這樣

^s*COPYs+pickled_test_licenses+(id,s+report_i 

這會自動刪除\ 的數據我不知道爲什麼會這樣發生

回答

1

read從它讀取的行剝離反斜槓。爲了防止這種情況,請使用-r標誌。

while read -r line; do 

你的正則表達式也應該[[:space:]]取代\s。正斜槓在正則表達式中沒有任何特殊含義,所以它們不應該被轉義。

chkregex="REGEX[[:space:]]+WITH[[:space:]]+/(.*)/" 
+0

我的問題不在於它不符合我行,但我的問題是,當它提取的數據(*),它會自動轉義\這個。就像如果我的文件中包含類似\ S +它提取出來作爲部分s + ... \將被自動刪除。我不知道爲什麼 –

+0

啊,同樣的原因,不同的解決方案。要匹配文字反斜槓,您需要將其轉義。 – chepner

+0

其實,我完全錯誤的軌道(寫正則表達式匹配正則表達式很棘手!) – chepner