美文网首页
2020-10-22 最简单的bash下正则表达式用法

2020-10-22 最简单的bash下正则表达式用法

作者: Rockage | 来源:发表于2020-10-22 01:46 被阅读0次
  1. 如果需要从字符串或者文件中截取两个以上的变量怎么办?
    很简单:
#!/bin/bash
re="^([^-]+)-(.*)$"
str="ABCDE-123456"
[[ $str =~ $re ]]
var1="${BASH_REMATCH[1]}"
var2="${BASH_REMATCH[2]}"
echo $var1
echo $var2

运行这个脚本,将会回显:
ABCDE
123456

BASH_REMATCH是bash的内置关键字,它是一个数组,用于存储正则表达式中圆括号() 所表达的变量,这跟平时我们使用其他编程语言的时候没有太大的区别,很简单是吧?


  1. 如果匹配的项目不止一个且位置随机,也就是平时我们说的“正则分组”又该怎么办呢?bash没有像python或者go那样有专门的findall或者FindAllStringSubmatch之类方法,但可以通过一个简单算法来完成:
#!/bin/bash

s='1234,2222,abc,311'
regex='([0-9]+)'

while [[ $s =~ $regex ]]; do
        echo "${BASH_REMATCH[1]}"
        s=${s#*"${BASH_REMATCH[1]}"}
done

运行这个脚本,将会回显:
1234
2222
311
这里有一个窍门,每次匹配完的部分将会从s中剔除,然后重新对s进行赋值,直到字符串中再没有可以匹配的项目为止,变相实现了匹配分组功能。
参考资料:
https://unix.stackexchange.com/questions/251013/bash-regex-capture-group


  1. 从文件中读取内容并匹配,这个也很简单,就不再赘述了:
    现有文件ss.json,内容如下:
{
    "server":"127.0.0.1",
    "server_port":8888,
    "local_address":"0.0.0.0",
    "local_port":9999,
    "password":"123abc",
    "timeout":600,
    "method":"aes-128-gcm"
}

我们想将server截取出来,在脚本里我们这么写:

IFS='\n'
cat ss.json | while read line ; do 
  if [[ "$line" =~ \"server\":\"(.+?)\" ]]; then 
    echo IP Address is: ${BASH_REMATCH[1]}
  fi
done

题外话:如果$line这个变量不加双引号,则系统会自动摘掉换行符,将整个文件变成一个长字符串。此处如果加上双引号 "$line" ,输出的时候则是原汁原味按照文件本来的样子输出。

运行脚本,系统将回显:
IP Address is: 127.0.0.1

相关文章

  • 2020-10-22 最简单的bash下正则表达式用法

    如果需要从字符串或者文件中截取两个以上的变量怎么办?很简单: 运行这个脚本,将会回显:ABCDE123456 BA...

  • python正则表达式浅析

    简单记录下python下正则表达式的用法,加深对正则表达式用法的记忆,方便以后爬虫本文选取了莫烦python中我觉...

  • read用法

    read命令用来读取标准输入放到变量中简单用法: !/bin/bash echo "Please input yo...

  • 安卓app安装器(bash脚本)

    闲来无事,写了一个安卓app安装的bash脚本。在Mac OS下测试通过。 用法很简单: 如果跟电脑连接的安卓设备...

  • Python正则表达式分组 Group

    在正则表达式介绍中,我们学习了正则表达式的基本用法。列举了一些简单的例子。在这一部分,将介绍更高级的用法,捕获分组...

  • bash的<<, <<<, < <()用法

    这几个都是在bash脚本中经常用到的。 cmd <

  • source bash sh的区别

    1、source命令用法 sourceFileName 作用:在当前bash环境下读取并执行FileName中的命...

  • Linux bash 入门 --转自:http://club.t

    BASH的基本语法 ·最简单的例子—— Hello World! ·关于输入、输出和错误输出 ·BASH中对变量的...

  • source sh bash ./四者的区别

    # TODO 1、source命令用法: source FileName 作用:在当前bash环境下读取并执行Fi...

  • 正则表达式

    用法。常用正则表达式。详细用法 //正则表达式:记录文本规则的代码 //常用的正则表达式的地方:登录,密码等格式的...

网友评论

      本文标题:2020-10-22 最简单的bash下正则表达式用法

      本文链接:https://www.haomeiwen.com/subject/qwoymktx.html