Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何剥离&;仅来自文件中URL的符号?_Linux_Sed_Awk - Fatal编程技术网

Linux 如何剥离&;仅来自文件中URL的符号?

Linux 如何剥离&;仅来自文件中URL的符号?,linux,sed,awk,Linux,Sed,Awk,我有一个文件,index.html,包含如下数据: <li><a href="/battered-fried-chicken-breast-no-skin.html">battered fried chicken breast, no skin</a></li> <li><a href="/bbq-short-ribs-with-sauce.html">bbq short ribs with sauce</a>&

我有一个文件,
index.html
,包含如下数据:

<li><a href="/battered-fried-chicken-breast-no-skin.html">battered fried chicken breast, no skin</a></li>
<li><a href="/bbq-short-ribs-with-sauce.html">bbq short ribs with sauce</a></li>
<li><a href="/bbq-spareribs-&-sauce-eat-lean-&-fat.html">bbq spareribs & sauce (eat lean & fat)</a></li>
<li><a href="/bbq-spareribs-&-sauce-eat-lean-only.html">bbq spareribs & sauce (eat lean only)</a></li>
  • 我需要从URL中去掉&符号,这样,
    “/bbq spareribs-&-sauce eat lean-&-fat.html”
    就变成了
    “/bbq spareribs--sauce eat lean--fat.html”
    。但是,我不希望从文件中非URL的部分删除&symbol,例如链接的文本,
    bbq spareribs&sauce(eat lean&fat)


    如何在标准Linux安装上实现这一点?对我来说,使用什么特定的工具/语言来实现结果并不重要,只要它有效。

    一种方法是使用具有XML包的工具/语言。该包将支持以编程方式轻松访问锚元素的href属性。因此,您可能会有以下情况:

    aElements = doc.getElement('a')
    
    foreach aElement in aElements {
     string url = a.getHref()
     removeAmpersane ( url )
    }
    
    $ sed 's/\([^ \t]\)&\([^ \t]\)/\1\2/g' file.html > out.html
    

    我确信几乎所有的语言级工具都有这方面的软件包。如果你愿意使用像语言这样的重型工具,这对你来说会很容易。如果你只是想要较低级别的linux工具,这超出了我的专业知识范围

    一种方法是使用具有XML包的工具/语言。该包将支持以编程方式轻松访问锚元素的href属性。因此,您可能会有以下情况:

    aElements = doc.getElement('a')
    
    foreach aElement in aElements {
     string url = a.getHref()
     removeAmpersane ( url )
    }
    
    $ sed 's/\([^ \t]\)&\([^ \t]\)/\1\2/g' file.html > out.html
    

    我确信几乎所有的语言级工具都有这方面的软件包。如果你愿意使用像语言这样的重型工具,这对你来说会很容易。如果你只是想要较低级别的linux工具,这超出了我的专业知识范围

    您可以轻松地使用javascript实现这一点:

    <head>
    
    <script type="text/javascript">
      document.onload = (function (ev) {
        var links = document.getElementsByTagName('a');
        for (var i = 0; i < links.length; i++) {
          var href = links[i].href.replace(/(&)/, '');
          console.log(links[i]);
        }
      });
    </script>
    
    </head>
    
    
    document.onload=(函数(ev){
    var links=document.getElementsByTagName('a');
    对于(变量i=0;i
    您可以轻松地使用javascript实现这一点:

    <head>
    
    <script type="text/javascript">
      document.onload = (function (ev) {
        var links = document.getElementsByTagName('a');
        for (var i = 0; i < links.length; i++) {
          var href = links[i].href.replace(/(&)/, '');
          console.log(links[i]);
        }
      });
    </script>
    
    </head>
    
    
    document.onload=(函数(ev){
    var links=document.getElementsByTagName('a');
    对于(变量i=0;i
    如果您愿意安装,这个简单的Python脚本可以执行您想要的操作:

    #!/usr/bin/evn python
    import sys
    from BeautifulSoup import BeautifulSoup
    
    soup = BeautifulSoup(sys.stdin.read())
    for a in soup.findAll("a"):
        a["href"] = a["href"].replace("&", "")
    
    print soup
    
    用法示例:

    [me@home]$ cat your.html | python amp_remover.py
    <li><a href="/battered-fried-chicken-breast-no-skin.html">battered fried chicken breast, no skin</a></li>
    <li><a href="/bbq-short-ribs-with-sauce.html">bbq short ribs with sauce</a></li>
    <li><a href="/bbq-spareribs--sauce-eat-lean--fat.html">bbq spareribs & sauce (eat lean & fat)</a></li>
    <li><a href="/bbq-spareribs--sauce-eat-lean-only.html">bbq spareribs & sauce (eat lean only)</a></li>
    
    [me@home]$cat your.html | python amp_remover.py
    
  • 警告:由于我们正在根据解析后的HTML表示重新生成输出HTML,因此格式可能会更改。其他可能的更改包括在标记格式不正确时显式关闭标记


    我可能错了,但我怀疑大多数使用正确的XML/HTML解析器的解决方案都会导致类似的问题。要保持文件的原样并只删除有问题的字符,您必须使用基于正则表达式的搜索和删除/替换。除了非常琐碎的模式之外,很多人都会这样做。在您的情况下,这可能是真的,但我还没有被说服。

    如果您愿意安装,这个简单的Python脚本可以实现您想要的功能:

    #!/usr/bin/evn python
    import sys
    from BeautifulSoup import BeautifulSoup
    
    soup = BeautifulSoup(sys.stdin.read())
    for a in soup.findAll("a"):
        a["href"] = a["href"].replace("&", "")
    
    print soup
    
    用法示例:

    [me@home]$ cat your.html | python amp_remover.py
    <li><a href="/battered-fried-chicken-breast-no-skin.html">battered fried chicken breast, no skin</a></li>
    <li><a href="/bbq-short-ribs-with-sauce.html">bbq short ribs with sauce</a></li>
    <li><a href="/bbq-spareribs--sauce-eat-lean--fat.html">bbq spareribs & sauce (eat lean & fat)</a></li>
    <li><a href="/bbq-spareribs--sauce-eat-lean-only.html">bbq spareribs & sauce (eat lean only)</a></li>
    
    [me@home]$cat your.html | python amp_remover.py
    
  • 警告:由于我们正在根据解析后的HTML表示重新生成输出HTML,因此格式可能会更改。其他可能的更改包括在标记格式不正确时显式关闭标记


    我可能错了,但我怀疑大多数使用正确的XML/HTML解析器的解决方案都会导致类似的问题。要保持文件的原样并只删除有问题的字符,您必须使用基于正则表达式的搜索和删除/替换。除了非常琐碎的模式之外,很多人都会这样做。在您的情况下,这可能是真的,但我还没有被说服。

    如果您决定使用一个简单的命令行正则表达式工具,并且您知道您的URL很好,并且在文本中始终使用符号,您可以尝试以下方法:

    aElements = doc.getElement('a')
    
    foreach aElement in aElements {
     string url = a.getHref()
     removeAmpersane ( url )
    }
    
    $ sed 's/\([^ \t]\)&\([^ \t]\)/\1\2/g' file.html > out.html
    

    这假定URL中与符号相邻的位置没有空格,并且URL中不包含的符号总是被空格包围。因此,这绝不是健壮的,但如果您只需要一次,它可能比安装Beautiful Soup更简单,而且您的html是可预测的。

    如果您决定使用一个简单的命令行正则表达式工具,并且您知道您的URL很好,并且在文本中始终使用符号,您可以尝试以下方法:

    aElements = doc.getElement('a')
    
    foreach aElement in aElements {
     string url = a.getHref()
     removeAmpersane ( url )
    }
    
    $ sed 's/\([^ \t]\)&\([^ \t]\)/\1\2/g' file.html > out.html
    

    这假定URL中与符号相邻的位置没有空格,并且URL中不包含的符号总是被空格包围。因此,这绝不是健壮的,但如果您只需要一次,它可能比安装Beauty Soup更简单,而且您的html是可预测的。

    为了完整性起见,这是一个awk解决方案。它应足够稳定,以满足以下要求: 简单的任务

    文件:

    $cat文件
    
  • 输出:

    $ awk 'BEGIN{FS=OFS=">"}{for (i=1;i<=NF;i++){if ($i ~ "a href")gsub(/\&/,"",$i)}}1' file
    <li><a href="/battered-fried-chicken-breast-no-skin.html">battered fried chicken breast, no skin</a></li>
    <li><a href="/bbq-short-ribs-with-sauce.html">bbq short ribs with sauce</a></li>
    <li><a href="/bbq-spareribs--sauce-eat-lean--fat.html">bbq spareribs & sauce (eat lean & fat)</a></li>
    <li><a href="/bbq-spareribs--sauce-eat-lean-only.html">bbq spareribs & sauce (eat lean only)</a></li>
    

    $awk'BEGIN{FS=OFS=“>”}{for(i=1;i仅仅是为了完整性考虑一个awk解决方案。对于
    简单的任务

    文件:

    $cat文件
    
  • 输出:

    $ awk 'BEGIN{FS=OFS=">"}{for (i=1;i<=NF;i++){if ($i ~ "a href")gsub(/\&/,"",$i)}}1' file
    <li><a href="/battered-fried-chicken-breast-no-skin.html">battered fried chicken breast, no skin</a></li>
    <li><a href="/bbq-short-ribs-with-sauce.html">bbq short ribs with sauce</a></li>
    <li><a href="/bbq-spareribs--sauce-eat-lean--fat.html">bbq spareribs & sauce (eat lean & fat)</a></li>
    <li><a href="/bbq-spareribs--sauce-eat-lean-only.html">bbq spareribs & sauce (eat lean only)</a></li>
    
    $awk'BEGIN{FS=OFS=“>”}{for(i=1;i