【问题标题】:Command line argument not recognised after pipe管道后无法识别命令行参数
【发布时间】:2013-09-02 11:35:25
【问题描述】:

我确实在 2011 年将这个问题发布到了一个线程 (Get text inside xml tag using grep)。我确实尝试使用命令行参数 ($1=filname, $2=tagname) 而不是固定名称来获得最终答案:

grep -E -m 1 -o "<$2>(.*)</$2>" ./private/$1.xml | sed -e 's,.*<$2>\([^<]*\)</$2>.*,\1,g'

显然这不起作用,因为管道后面的部分没有得到参数 $2。 我是一个完全的 linux 菜鸟,但我的直觉是管道启动了一个没有得到父参数的新进程。我尝试了 Google 很长一段时间,但确实变得更加困惑。 有一个简单的解决方法吗?

【问题讨论】:

    标签: xml-parsing grep


    【解决方案1】:

    您的命令不起作用,因为 '-quotes 中的变量没有被替换。

    这应该可行:

    grep -E -m 1 -o "<$2>(.*)</$2>" ./private/$1.xml | sed -e "s,.*<$2>\\([^<]*\\)</$2>.*,\\1,g"
    

    也就是说,使用 grep 来完成这样的任务并不是一个好主意。最好使用像我的 Xidel (或 xpath/xmlstarlet/... )这样的实际 html 处理器。然后你可以写:

    xidel ./private/$1.xml -e //$2
    

    【讨论】:

    • 谢谢,就像一个魅力。我完全同意,他确实是个坏主意,但我正在等待我使用的软件包中的适当 XML 解析器。我去看看西德尔
    猜你喜欢
    • 1970-01-01
    • 2020-08-28
    • 2018-07-05
    • 2020-04-11
    • 2017-11-19
    • 1970-01-01
    • 1970-01-01
    • 2011-11-14
    • 2021-11-25
    相关资源
    最近更新 更多