正则表达式不匹配,不明白为什么

时间:2014-11-03 16:02:40

标签: regex sh

我将服务器移动到新服务器(更便宜)。两者在不同版本(5.0和6.5)中都具有相同的Linux(CentOS)。我有一个shell脚本来过滤日志中的一行:

if [ -f $URLFILE ]
then
  echo "File found, getting userinfo..."
  while read line;
    do
    if [[ $line =~ ".Userlist: .*" ]]
    then
      echo "Found user information."
      echo $line > /home/....net.txt;
...

因此,如果红线与正则表达式匹配,则应将其回显到文件中。这在旧系统上工作正常,但正则表达式在新系统上不匹配(没有任何其他更改)。正如互联网上的正则表达式测试人员告诉我的那样,正则表达式是正确的。

1 个答案:

答案 0 :(得分:1)

有两个问题:

  1. sh不支持使用=~bash
  2. 进行正则表达式匹配
  3. 不应引用正则表达式,最好引用您的变量。
  4. 你可以在BASH中使用它:

    if [[ "$line" =~ Userlist:[[:blank:]] ]]
    

    或者完全避免使用正则表达式并使用glob matching

    if [[ "$line" == *"Userlist: "* ]]