gpt4 book ai didi

regex - 无法使提到的正则表达式在 sed 命令中工作

转载 作者:行者123 更新时间:2023-12-03 14:06:52 25 4
gpt4 key购买 nike

我正在尝试使以下正则表达式在 sed 中工作bash 中的命令。

^[^<]?(https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&\/\/=]*))[^>]?$
我知道正则表达式是正确的,并且按我的预期工作。所以;不需要帮助。我在在线正则表达式测试器上对其进行了测试,它按我的预期工作。
请在 here. 中找到上述正则表达式的演示
我的需求:
我想将每个网址都包含在 <> 中.如果 url 已经包含;然后将其附加到结果中,如上面的正则表达式链接所示。
示例输入:(在名为 website.txt 的文件中)
// List of all legal urls
https://www.google.com/
https://www.fakesite.co.in
https://www.fakesite.co.uk
<https://www.fakesite.co.uk>
<https://www.google.com/>
预期输出:(在名为 output.txt 的文件中)
<https://www.google.com/> // Please notice every url is enclosed in the <>.
<https://www.fakesite.co.in>
<https://www.fakesite.co.uk>
<https://www.fakesite.co.uk> // Please notice if the url is already enclosed in <> then it is appended as it is.
<https://www.google.com/>
我在 sed 中的尝试:
  • 由于我不精通 bash 命令;所以以前我无法在 sed 中正确捕获该组但看完后this回答;我发现我们需要转义括号才能捕获它。
  • 某处;我读到 sed 不支持环视(基于 GNU)所以我也删除了环视;但这也不起作用。 如果它不支持环视,那么我使用 this正则表达式,它达到了我的目的。
  • 然后;这是我对 sed 的最新尝试命令:
    sed 's@^[^<]?(https?://(?:www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()@:%_\+.~#?&/=]*))[^>]?$@<\1>@gm;t;d' websites.txt > output.txt

  • 我的确切问题:
    如何使上述命令正常工作。如果您将运行我在上面第 3 点中附加的命令示例;你会看到它没有正确替换内容。它只是转储 websites.txt 的内容至 output.txt .但是在正则表达式演示中;附在上面它工作正常,即将所有未封闭的网站都放在 <> 中.任何的意见都将会有帮助。 我最好在 sed 中使用它,但如果可能的话,我也可以在 awk 中转换上述命令 ?如果你能,也请帮我解决这个问题;我将非常感激。谢谢

    最佳答案

    长时间工作后,我让我的 sed 命令工作。以下是有效的命令。

    sed -E 's@^[^<]?(https?://(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&=]*))[^>]?$@<\1>@gm;t' websites.txt > output.txt
    您可以在 here. 中找到该命令的示例实现
    因为,正则表达式已经满足了我写这个要求的人的要求;我只需要获得有关命令语法的帮助(尽管非常欢迎任何改进);我希望该命令使用相同的正则表达式模式。
    以前不知道现在学到的东西:
  • 我对 -E 一无所知旗帜。现在我知道了;那个-E使用 POSIX“扩展”语法(“ERE”)。感谢 @戈登戴维森 @Sundeep . Further reading.
  • 我不清楚 sed 不支持环视。但现在我知道 sed 不支持环视。感谢 @dmitri-chubarov . Further reading
  • 我不知道 sed 也不支持非捕获组。感谢 @Sundeep 为了解决这部分。 Further Reading
  • 我不知道 GNU sed 作为一个特定的命令行工具。感谢 @oguzismail 为了这。 Further reading.
  • 关于regex - 无法使提到的正则表达式在 sed 命令中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62494231/

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