我在多个文件的多行上有以下类型的语句(它们不一定单独在一行上):
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/