正好匹配if语句中的一个空格

时间:2015-05-25 05:34:28

标签: regex bash unix

我正在尝试立即匹配文件以更改文件名称

tempString="hi"
end="_hi.pdf"
for c in *.pdf; do
 tempString="$(echo ${c})"
 if [[ $tempString =~ $AA[0-9][0-9][0-9]\.pdf$ ]]
  then
  echo "inside if"
  tempString="$(echo $tempString | tr -d ' ')"
  tempString=${tempString%.pdf}
  mv "%c" "$monthyear$tempString$end"
 fi
done

tempString设置为“AA 111.pdf”

我需要它匹配AA 111.pdf而不是AA 111.pdf(一个空格而不是两个空格)。我只想让它在AA和111之间恰好匹配一个空格。

它保持匹配这两个例子或两者都不匹配。我试过\ s,[\ s],[:space:],[[:space:]]等等。

我试过在各处查找,但无济于事。有人可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

以下内容将匹配一个(仅限一个)空格名称,例如AA 111.pdf

if [[ "$tempString" =~ ^AA" "[0-9][0-9][0-9]\.pdf$ ]]; 

诀窍在于正则表达式中的quote your spaces

更新:以下代码忽略了两个(以及更多)空格示例:

tempString="AA  111.pdf"
if [[ "$tempString" =~ ^AA" "[0-9][0-9][0-9]\.pdf$ ]]; then 
    echo "yes" 
else 
    echo "no"
fi

这会打印no

单线版:

tempString="AA  111.pdf"; if [[ "$tempString" =~ ^AA" "[0-9][0-9][0-9]\.pdf$ ]]; then echo "yes"; else echo "no"; fi

答案 1 :(得分:0)

试试这个正则表达式[a-zA-z]+ \d+

Demo

如果您想要space之前的任何字符,请使用此\w+ \d+

如果您想要space之前和之后的任何字符,请使用此\w+ \w+

如果您想考虑文件扩展名,可以添加\.pdf$ 在上面

的任何regex的末尾