管道后无法识别命令行参数

时间:2013-09-02 11:35:26

标签: xml-parsing grep

我确实将此问题发布到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 noob,但我的预感是管道启动一个新的进程,不能得到父参数。我尝试了谷歌很长一段时间,但确实变得更加困惑。 有一个简单的工作吗?

1 个答案:

答案 0 :(得分:0)

您的命令不起作用,因为'-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