0

我确实从 2011 年开始将此问题发布到一个线程(使用 grep 获取 xml 标记内的文本)。我确实尝试使用命令行参数 ($1=filname, $2=tagname) 而不是固定名称来获得最终答案:

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

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

4

1 回答 1

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
于 2013-09-02T11:55:12.767 回答