Bash脚本中grep和sed命令的用法解析

grep -qxiE ' +- 172.*' "${OCEANXECM_ROOT_DIR}/configs/settings.yaml" || sed -i " ${ecmlineNum} a \ \ \ - 172.*" "${OCEANXECM_ROOT_DIR}/configs/settings.yaml"

这段命令是 Bash 脚本中的一行,用于在特定的配置文件中添加一行内容。下面是对这行命令的详细解释:

1. `grep -qxiE ' +- 172.*'`:这部分使用 `grep` 命令来搜索一个正则表达式 `' +- 172.*'`。其中:
   - `-q`:安静模式,不输出。
   - `-x`:全行匹配,只返回完全匹配整个行的行。
   - `-i`:忽略大小写。
   - `-E`:使用扩展正则表达式。
   - `' +- 172.*'`:搜索包含以空格开始,后跟一个加号或减号,然后是 `172` 后跟任意字符的行。

2. `${OCEANXECM_ROOT_DIR}`:这是一个环境变量,它代表某个目录的路径,这个目录是 `OCEANXECM` 程序的根目录。

3. `/configs/settings.yaml`:这是配置文件的相对路径,位于 `OCEANXECM_ROOT_DIR` 目录下的 `configs` 子目录中。

4. `||`:逻辑或操作符,如果 `grep` 命令(左边的部分)没有找到匹配的行,那么将执行 `sed` 命令。

5. `sed -i`:`sed` 是一个流编辑器,用于对文本进行处理。`-i` 选项表示直接修改文件。

6. `" ${ecmlineNum} a \ \ \ - 172.*"`:这是 `sed` 命令的参数,含义如下:
   - `"`:开始双引号,用于包含参数。
   - `${ecmlineNum}`:这是一个变量,代表要添加行的行号。
   - `a`:`sed` 命令的追加操作,表示在指定的行号后追加文本。
   - `\ \ \ - 172.*`:这是要追加的文本,其中 `\ ` 是转义空格,`- 172.*` 是要添加的内容,表示添加一个以空格开始,后跟一个减号,然后是 `172` 后跟任意字符的行。

7. `"${OCEANXECM_ROOT_DIR}/configs/settings.yaml"`:这是 `sed` 命令要操作的文件路径。

举例说明:
假设 `settings.yaml` 文件中的内容如下:
# 这是注释
ip: 192.168.1.1
port: 8080
如果执行这个脚本,并且 `ecmlineNum` 的值为 2(即在 `port: 8080` 这一行之后添加内容),那么 `sed` 命令将会在文件中添加以下内容:
# 这是注释
ip: 192.168.1.1
port: 8080
 - 172.*
如果 `settings.yaml` 文件中已经存在匹配 ` +- 172.*` 的行,那么 `grep` 命令会找到匹配项,`sed` 命令则不会执行,文件内容保持不变。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值