gpt4 book ai didi

regex - sed 用正则表达式替换 bbcodes

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:25:10 25 4
gpt4 key购买 nike

我想替换特定的 BBCodes,例如

[youtube]http://youtube.com/watch?v=00000000000[\youtube]
[youtube]http://youtu.be/00000000000[\youtube]
[youtube]http://youtu.be/00000000000/[\youtube]
[youtube]http://youtube.com/watch?v=00000000000&something=wrong[\youtube]
[youtube]youtube.com/watch?v=00000000000[\youtube]

[MEDIA=youtube]00000000000[\MEDIA]

我当前的模式没有匹配:

 sed -i 's/\[youtube\]\(http:\/\/|https:\/\/|.*\)\(www\.|.*\)youtu\(be\.com|\.be\)\(\/watch\?v=|\/\)\([a-zA-Z0-9-]{11}\)\(.*\)\[\/youtube\]/\[MEDIA=youtube\]\5\[\/MEDIA\]/g' text.txt

你怎么看?哪里可能是我的错?

谢谢!

最佳答案

awk 的可能解决方案(将其放入 file.awk 中,file.txt 是您的输入)。

awk -f 文件.awk 文件.txt

文件.awk

BEGIN {
# a list of patterns
lp = \
"http://youtube.com/watch?v= http://youtube.com/watch?v=/ " \
"http://youtu.be/ http://youtube.com/watch?v=/ " \
"youtube.com/watch?v="

# escape ?
gsub("?", "\\?", lp)

# add [youtube]
media="youtube"
gsub("[ ^]", " \\[" media "]", lp)

# make array of patterns
split(lp, pat, " ")
}

{
for (i in pat) {
n=split($0, arr, pat[i])
if (n>1) {
# remove rest of the string
gsub("[/[&].*", "", arr[2])
printf "[MEDIA=%s]%s[MEDIA]\n", media, arr[2]
}
}
}

关于regex - sed 用正则表达式替换 bbcodes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14097904/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com