gpt4 book ai didi

正则表达式从磁力链接获取标题: "unterminated address regex"

转载 作者:太空宇宙 更新时间:2023-11-04 04:42:35 26 4
gpt4 key购买 nike

我正在尝试创建一个简单的 shell 脚本来从磁力链接获取标题并将其写入 .out 文件。

如果我在 regex101.com 上尝试下面的正则表达式,就会成功。请参阅屏幕截图。

&dn=(.*?)&

( https://imge.to/i/Fw26r )

问题是我总是收到以下错误:“未终止的地址正则表达式”。

我尝试了不同的选项,但结果相同:

u@d:~/Documents/tmp $ sed -e '\&dn=(.*?)\&$' magnet.txt >> magnet.out
sed: -e expression #1, char 13: unterminated address regex
u@d:~/Documents/tmp $ sed -E '\&dn=(.*?)\&' magnet.txt >> magnet.out
sed: -e expression #1, char 12: unterminated address regex
u@d:~/Documents/tmp $ cat magnet.txt | sed -e '\&dn=(.*?)\&i'
sed: -e expression #1, char 13: unterminated address regex
u@d:~/Documents/tmp $ sed -e '&dn=(.*?)&' magnet.txt >> magnet.out
sed: -e expression #1, char 1: unknown command: `&'

你能指出我正确的方向吗?

最佳答案

结束分隔符之前的反斜杠错误。第一个反斜杠必须表示“我想使用与默认斜杠不同的分隔符”,但第二个反斜杠表示“这是一个文字与符号,而不是结束分隔符”(因此 sed 期望正则表达式继续,并在它从未看到结束分隔符时提示)。

仅一个地址表达式就会导致 sed 完整地打印匹配行(第二次,没有 -n,因为默认行为是打印所有行),并且您似乎希望 & 符号成为正则表达式的一部分,而不是正则表达式周围的分隔符。如果目的是提取&符号之间的字符串,您需要类似

sed -n 's/.*&dn=\([^&]*\)&.*/\1/p' magnet.txt

也就是说,仅用提取的括号表达式替换整行,然后打印该行。

sed 是一种脚本语言。除斜杠(以及冒号和等号)之外的大多数命令都是单字母字母; s 命令 - 这是许多人遇到过的唯一命令 - 在文本中执行替换。

重申一下,您的原始脚本看起来像

sed '/dn=.*?/'

使用自定义的&分隔符而不是/。这将查找包含 dn= 的行,后跟任何内容,后跟文字问号。默认操作是打印匹配的行,因此 sed 会将这些行打印两次(而所有其他行仅打印一次)。

非贪婪量词.*?是一个Perl扩展,我熟悉的任何sed方言都不支持它;但准确地表达你想要的实际上更好(即使你确实可以使用非贪婪量词)。

关于正则表达式从磁力链接获取标题: "unterminated address regex",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57026016/

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