首页 > 解决方案 > 为什么我的 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”?这对我来说没有多大意义,我以为我只匹配字母和破折号。

好的,这很简单。巴曼钉了它。

标签: bashsed

解决方案


正如评论中所建议的,问题是你-*一开始就有。所以当有 0 或更多时它匹配-

一个简单的解决方法是使用这个: s/-[a-zA-Z\-]* / /g

所以你的代码变成:

#!/bin/bash
Arguments=$@
echo $Arguments
Files=$(echo $Arguments | sed -e "s/-[a-zA-Z\-]* / /g")
echo $Files```

推荐阅读