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



我正在尝试创建一个简单的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方言中都不支持;但是准确地表达你想要的东西实际上更好(即使你可以访问非贪婪量词)。

最新更新