我想匹配xml属性中的日期。我尝试过以下命令:
xmlstarlet sel -t -v 'string(//*[local-name()="***"][@date="$(date +'%d %b %y')"]/@...)' file.xml
我还尝试用bash变量替换bash表达式。我使用过单引号和双引号,正常和圆括号,没有骰子。
答案 0 :(得分:0)
在打开双引号之前,您需要关闭单引号;否则,单引号引用双引号,因此它们没有效果。
copy
xmlstarlet sel -t -v \
'string(//*[local-name()="***"][@date="'"$(date +'%b %d $y')"'"]/@...)' file.xml
# 'single-quoted content here"'"double-quoted content here"'"single-quoted content here'
# | ^| |^ |
# ||||||||||||||||||||||||||||| |||||||||||||||||||||||||||||
下面有"
个字符作为LITERAL:它们被周围的单引号转义,因此成为传递给xmlstarlet的字符串的一部分。不被^
包围的另一个"
是语法的:它们是对shell的指令,'
扩展的内容不是分词或全局扩展的。 (管道显示字符串的哪些部分是单引号,但需要注意的是,结尾的单引号是语法而不是字面引用,因此实际上并没有引用它们。)
查看shell连接到单个参数列表元素中的不同引用的子字符串可能更容易:
$(date)
- 单引号,包括最后的文字'string(//*[local-name()="***"][@date="'
。"
- 双引号。"$(date +'%b %d $y')"
- 单引号,包括文字'"]/@...)'
。