【问题标题】:Find / Replace Directory and Bash Script查找/替换目录和 Bash 脚本
【发布时间】:2011-03-30 03:15:38
【问题描述】:

我有一些这样的路径:

/www/site1.dev/public_html/test.htm /www/site2.dev/html/test.htm /www/site3.dev/public/test.htm

我想将它们传递给 bash 脚本并以这种格式返回结果:

http://site1.dev/test.htm http://site2.dev/test.htm http://site3.dev/test.htm

我不确定处理正则表达式部分的最佳方法是什么:

#!/bin/sh RET=''; 功能修剪(){回声$ 1; } 对于“$@”中的 ARG 做 //匹配并添加现有的RET值 RET= 'http://'(正则表达式或在此处查找/替换) RET 完毕 回声“>>$(修剪$RET)

解决方案

我的代码基于 Wes Hardaker 的回答

域=`回显 $ARG | sed 's#.*www/##'` DOMAIN=`回显 $DOMAIN | sed -E 's#/(public|html).*##'` POST=`回显 $ARG | sed -E 's#.*html##'` echo 'http://'$DOMAIN$POST

【问题讨论】:

    标签: regex linux bash unix


    【解决方案1】:

    最简单的方法可能是使用“sed”。即:

    RET="http://"`echo $ARG | sed 's#/www##;s#/(public_|)html/#/#;'
    

    【讨论】:

    • 您能详细说明正则表达式的工作原理吗?什么是 www##;s#?另外,如果路径在 /www/ 之前有额外的未知字符怎么办?
    • sed 允许不基于使用 / 字符的正则表达式,因此您可以使用 # 字符来绑定可能包含大量 /s 的表达式。因此,第一个正则表达式 s#/www## 将 /www 替换为空。第二个,s#/(public_|)html/#/#/public_html//html/ 替换为 /。跨度>
    • 我没有处理 /www/ 之前的其他项目,因为它们不在您的示例中。但是您可以在过滤器表达式中添加更多内容:s#/foo/bar/path/to/www## 也可以。
    • 虽然此页面上的所有解决方案都很好,但我认为使用 sed 最适合我。我将我的语法添加到问题的底部。
    【解决方案2】:

    假设您的路径在文件中

    $ awk 'BEGIN{OFS=FS="/"}{print "http:/"$1,$3,$NF}' file
    http://site1.dev/test.htm
    http://site2.dev/test.htm
    http://site3.dev/test.htm
    

    Ruby(1.9+)

    $ ruby -F"/" -ane 'print "http:/"+[$F[0],$F[2],$F[-1]].join("/")' file
    

    【讨论】:

      【解决方案3】:
      command to generate list of pathnames | while read path; do 
        IFS=/
        set -- $path
        echo "http://$3/$5"
      done
      

      【讨论】:

        【解决方案4】:

        另一种方法,如果您从 www/.. 开始

        pushd www
        find * -type f | while read line; do echo http://${line%%/*}/${line##*/}; done
        popd
        

        【讨论】:

          猜你喜欢
          • 2017-03-10
          • 1970-01-01
          • 1970-01-01
          • 2015-02-01
          • 2014-02-17
          • 1970-01-01
          • 2013-11-08
          • 2012-02-13
          • 2016-03-18
          相关资源
          最近更新 更多