使用 bash 将文本添加到文件中的文本

Add text to text in file with bash

我不是 bash 专家,所以我请求帮助来操作文件中的字符串。我知道 sed 但我很难尝试。

基本上我有一个包含以下内容的文件:

docs: lala

docs: this is the description

That is the footer

我只需要在 第一行添加 docs: lala 以下文本: ($SCOPE) 最后应该是这样的:

docs(some_scope_name): lala

docs: this is the description

That is the footer

我有的是这个:

sed -i $FILE -e "s/docs:/docs:($SCOPE_NAME)/"

这很好用,但是也替换了第二个文档。我只需要第一场!

不仅文档应该匹配,其他类型也应该匹配,它们是:

build|chore|ci|docs|feat|fix|perf|refactor|revert|style|test

例如也可以是:

feat(some_scope_name): lala

feat: this is the description

That is the footer

我应该如何改进我的 sed 以实现该目标?

编辑

@anubhava 的建议回答

sed -E "0,/^[[:blank:]]*(build|chore|ci|docs|feat|fix|perf|refactor|revert|style|test):/ s//(lala):/" $FILE

工作正常,但它仍在替换第二个匹配项:

docs(lala): lala

docs(lala): this is the description

That is the footer

您可以使用此 gnu-sed 命令:

sed -i -E "1s/^[[:blank:]]*(build|chore|ci|docs|feat|fix|perf|refactor|revert|style|test):/($SCOPE_NAME):/" file

使用sed

$ scope=some_scope_name
$ sed "1s/\([^:]*\)\(.*\)/($scope)/" input_file
docs(some_scope_name): lala

docs: this is the description

That is the footer