找到正则表达式

问题描述:

我想使用的代码找到正则表达式

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 

这会自动删除\ 的数据我不知道为什么会这样发生

read从它读取的行剥离反斜杠。为了防止这种情况,请使用-r标志。

while read -r line; do 

你的正则表达式也应该[[:space:]]取代\s。正斜杠在正则表达式中没有任何特殊含义,所以它们不应该被转义。

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

我的问题不在于它不符合我行,但我的问题是,当它提取的数据(*),它会自动转义\这个。就像如果我的文件中包含类似\ S +它提取出来作为部分s + ... \将被自动删除。我不知道为什么 –

+0

啊,同样的原因,不同的解决方案。要匹配文字反斜杠,您需要将其转义。 – chepner

+0

其实,我完全错误的轨道(写正则表达式匹配正则表达式很棘手!) – chepner