bash - 为什么我的 Bash sed 命令( sed -e "s/-*[a-zA-Z\-]* / /g" )删除点后的字符?
问题描述
我正在制作一个用于构建 cpp 的简单 bash 脚本,并且在使用 sed 分隔参数时遇到问题,标题中的命令是删除点“。”之后的每个字符,我不明白原因
这就是我的脚本中的内容:
#!/bin/bash
Arguments=$@
echo $Arguments
Files=$(echo $Arguments | sed -e "s/-*[a-zA-Z\-]* / /g")
echo $Files
运行“./build.sh --linux --clean --no-questions main.cpp build/linux/main”时,这是我在输出中得到的
--linux --clean --no-questions main.cpp build/linux/main
main. build/linux/main
为什么在这段时间之后删除“cpp”?这对我来说没有多大意义,我以为我只匹配字母和破折号。
好的,这很简单。巴曼钉了它。
解决方案
正如评论中所建议的,问题是你-*
一开始就有。所以当有 0 或更多时它匹配-
。
一个简单的解决方法是使用这个:
s/-[a-zA-Z\-]* / /g
所以你的代码变成:
#!/bin/bash
Arguments=$@
echo $Arguments
Files=$(echo $Arguments | sed -e "s/-[a-zA-Z\-]* / /g")
echo $Files```
推荐阅读
- javascript - 需要在 Javascript 或 Angular 中搜索时显示来自 JSON 的父子节点
- angular - 'mat-toolbar' 不是已知元素:
- ssl - 如何使用 SSL 证书配置 Jasmin 短信网关?
- java - 预期为 BEGIN_OBJECT,但经过改造后为 BEGIN_ARRAY
- c# - c# ManagedInstallerClass.InstallHelper 块服务可执行文件
- r - R中数据框列的动态变异,无法弄清楚如何使用函数或循环
- python - 如何在 Python 中使用 VPN 进行网页抓取?
- javascript - Datepicker 项目未刷新
- c - 指向作为函数参数的指针的指针
- r - 使用 map2_dfr 将数据绑定在一起