仅替换/删除字符串中的第一次出现

时间:2021-03-16 15:40:20

标签: bash shell awk sed

我有一个这样的字符串:file-name-example-data。 我只想删除字符串中的第一个破折号 (-)。 基本上我想要这个输出:filename-example-data。 您建议使用什么 bash 命令?任何 sed 或 awk 命令都可以工作吗?

字符串可以是任意长度和任意数量的破折号。

3 个答案:

答案 0 :(得分:1)

我会按照以下方式使用 GNU AWK 的 sub 函数,让 file.txt 内容为

file-name-example-data

然后

awk '{sub("-","");print}' file.txt

输出

filename-example-data

说明:sub 函数用空字符串替换 - 的最左边出现,即删除它,因为我使用了 2 个参数形式,它可以在整行上工作。 print 单独打印整行更改。如果您想了解有关 sub 的更多信息,请阅读 String Functions manual

(在 gawk 4.2.1 中测试)

答案 1 :(得分:1)

像这样使用sed

sed 's/-\+//' input

解释:替换 (s) 一个或多个 - 的第一个实例。

我会以这种方式使用 awk:

awk '{sub(/-+/,"")}1' input

答案 2 :(得分:1)

用字符串

a="file-name-example-data"

你可以使用

echo "${a/-}"
filename-example-data
相关问题