regex - 多次转换sed中的匹配组

标签 regex sed

我在多个文件的多行上有以下类型的语句(它们不一定单独在一行上):

xref:my-awesome-link[This link]

我需要将其更改为:

xref:this-link[This link]

我必须:

xref:this link[This link]

使用(发布 shell 脚本中的全部内容):

find ./ -name "*.md.adoc" -type f -exec sh -c \
  'gsed -i "s/xref\:.*\[\(.*\)\]/xref\:\L\1\E\[\1\]/g" {}' \;

xref\:.*\[\(.*\)\] - 捕获 [] 内字符串的 reg exp。

\L\1\E\ - 进行小写转换。

我现在正在努力解决的问题是如何将 xref:this link[This link] 转换为 xref:this-link[This link]。我知道我需要转换匹配的组,但无法弄清楚如何同时使用小写字母并将空格替换为“-”。

我正在使用 GNU Sed 在 MacOS 上运行它。

谢谢!

最佳答案

既然你说你的 sed 是 gnu sed,这是使用 gnu sed 的 e 标志而不是标签和分支的替代解决方案:

sed -r 's/(xref:).*\[(.*)]/echo "\1$(echo "\L\2\E"\|sed "s# #-#g")[\2]"/ge'

让我们做一些测试:

$ echo "xref:my-awesome-link[FOO Bar BLAH]"|sed -r 's/(xref:).*\[(.*)]/echo "\1$(echo "\L\2\E"\|sed "s# #-#g")[\2]"/ge'
xref:foo-bar-blah[FOO Bar BLAH]

关于regex - 多次转换sed中的匹配组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61887182/

相关文章:

javascript - 分割数组正则表达式(a但不是ab,a之后不会丢失字符)

bash - sed 不要删除多余的空格

bash - 在 bash 中删除以 pattern 开头的单词

unix - 使用 sed 将时间戳转换为日期时间

html - sed HTML </>标签

javascript - 验证 Google 文档和 Office 365 网址

java - 正则表达式包含和排除转义序列

javascript - 用于匹配仅出现在字母之间而不是字符串开头或结尾的 ' (单引号)的单次出现的正则表达式

python - 用空格替换前导和尾随连字符?

linux - 获取引号之间的单词