gpt4 book ai didi

sed 忽略模式并匹配同一行中的模式

转载 作者:行者123 更新时间:2023-12-05 02:29:11 24 4
gpt4 key购买 nike

输入文件

<a href="perl.html">perl</a>     <a href="http://zoidberg.sourceforge.net/out.html">http://zoidberg.sourceforge.net</a>
<a href="zoiduser.html">zoiduser</a> <a href="perl.html">perl</a> <a href="http://zoidberg.sourceforge.net/sample.html">http://zoidberg.sourceforge.net</a>

我只需要从上述文件的以下 URL 中删除 .HTML 扩展名:

<a href="perl.html">perl</a>
<a href="zoiduser.html">zoiduser</a>

这样最终的输出应该是这样的:

<a href="perl">perl</a>     <a href="http://zoidberg.sourceforge.net/out.html">http://zoidberg.sourceforge.net</a>
<a href="zoiduser">zoiduser</a> <a href="perl.html">perl</a> <a href="http://zoidberg.sourceforge.net/sample.html">http://zoidberg.sourceforge.net</a>

这就是我正在做的:

sed '/"http\|"www\|"mailto/ ! s|\(.html\)||g' file

但它会在匹配第一个模式后立即忽略该行,即避免以“http|”www|“mailto”开头的 URL。

最佳答案

你可以使用

sed -E 's/("(http|www|mailto)[^"]*")|\.html/\1/g' file

详细信息:

  • -E - 启用 POSIX ERE 语法
  • ("(http|www|mailto)[^"]*") - 第 1 组 (\1):" 和然后是 httpwwwmailto,然后是 " 以外的零个或多个字符,然后是 "
  • | - 或者
  • \.html - .html 字符串。

替换为第 1 组值。

参见 online demo :

#!/bin/bash
s='<a href="perl.html">perl</a> <a href="http://zoidberg.sourceforge.net/out.html">http://zoidberg.sourceforge.net</a>
<a href="zoiduser.html">zoiduser</a> <a href="perl.html">perl</a> <a href="http://zoidberg.sourceforge.net/sample.html">http://zoidberg.sourceforge.net</a>'
sed -E 's/("(http|www|mailto)[^"]*")|\.html/\1/g' <<< "$s"

输出:

<a href="perl">perl</a>     <a href="http://zoidberg.sourceforge.net/out.html">http://zoidberg.sourceforge.net</a>
<a href="zoiduser">zoiduser</a> <a href="perl">perl</a> <a href="http://zoidberg.sourceforge.net/sample.html">http://zoidberg.sourceforge.net</a>

关于sed 忽略模式并匹配同一行中的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72337107/

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