【问题标题】:Finding a particular string in a xml file using grep if that string is a substring of another string?如果该字符串是另一个字符串的子字符串,则使用 grep 在 xml 文件中查找特定字符串?
【发布时间】:2016-01-22 11:32:51
【问题描述】:
#!/bin/bash
I = `grep -R --include="*.xml" "Non Frontal Face" /home/ashutosh/Desktop/imgdone | grep "Frontal Face" > temp.txt`
cut -d':' -f1 temp.txt > out.txt
cat out.txt

我想要的是所有具有“正面”的 xmls 应该只显示,但结果中我得到的不是所有文件,而且无论“非正面”字符串出现在哪里,我都会得到“正面”以粗体突出显示。

请帮帮我!! ?

【问题讨论】:

  • 表达错误,你说var=$(command)= 周围的空格不正确,并使 Bash 将 var = $(command) 解释为“使用参数 =$(command) 执行命令 var
  • 向我们展示您的输入 XML 示例和所需的输出。
  • 非正面脸_快乐是任何给定 xml 的属性。我希望检测到任何具有“正面”的 xml。那样的话,我该怎么办?
  • 完全按照汤姆告诉你的去做。显示您的 XML 文档的一个小样本,并显示您期望的输出。 grep 可能是错误的工具。
  • grep 几乎绝对是错误的 XML 工具。它不理解实体编码(XML 文件可以在其标题中声明 &f;Face 的缩写,而 grep 不会理解 Non Frontal &f; 意味着 Non Frontal Face - 同样适用于内置像 & 这样的编码用于 & 符号。它不理解 cmets,它不理解 CDATA 部分,你不能进行结构或上下文感知匹配......只是工作的错误工具,当 XML 感知时可以使用可以正确完成所有这些事情的工具。

标签: xml string bash shell


【解决方案1】:

如果我理解正确,您想从“正面”匹配中删除“非正面”吗?

grep -R --include="*.xml" "Frontal Face" /home/ashutosh/Desktop/imgdone |
grep -v "Non Frontal Face"

如果您只需要文件 nmes,请将其通过管道传输到 cut -d : -f 1。不需要临时文件,用语法错误替换奇怪的命令是完全多余的。

(如果你用等号周围的空格修复了语法错误,I 最终会包含一个空字符串,因为无论如何你都将所有输出重定向到一个文件。你没有使用 I 做任何事情无论如何,所以它是双重或三重多余的。)

【讨论】:

  • 能否请您告诉如何搜索具有多个属性的 xml。除此之外,假设我要搜索更多的关键字,我该如何将它集成到同一段代码中! ?
  • 在一般情况下,您需要像 XPath 这样的东西来正确操作 XML。对结构化格式使用面向行的工具通常不是一个好主意,尽管它可以在有限的情况下完成。
  • 如果这个答案解决了你的问题,请考虑accepting它。谢谢。
  • 您能否详细说明我应该如何进行?...在​​同一个 bash 脚本中,我应该如何搜索“快乐”“卡通”等属性??
  • 您最初的问题根本不清楚,您的后续问题也不是很清楚。像您这样的人应该发布一个单独的新问题,希望这次能清楚地说明您想要实现的目标以及您遇到的问题。
【解决方案2】:

也许这会有所帮助

grep -Rl "Frontal Face" *.xml |grep -v "Non Frontal Face" > out.txt

-l 告诉 grep 只打印文件名。

【讨论】:

  • 它仍然在做同样的事情,即使术语是“非正面脸”,术语“正面脸”也会被突出显示,因为正面脸是非....脸的子串
  • 是说突出显示是您问题的一部分(即,它不仅限于选择正确的行,还突出显示正确的子集)?我建议对此更加明确。
  • 伙计们,当我查询“正面脸”-(i) 时(因为我有兴趣获取这个词来的那些 xml,只有这个字符串),但我得到了“非正面”-(ii) 写成 (i) 是 (ii) 的子串。我希望只有那些 xmls 应该作为只有(i)出现而不是(ii)的输出。我应该使用什么工具?
  • 抱歉,问题不清楚。可以这样: grep -Rl "Frontal Face" *.xml |grep -v "Non Frontal" > out.txt
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-06-17
  • 1970-01-01
  • 2019-05-11
  • 2011-02-07
  • 1970-01-01
  • 2014-11-10
相关资源
最近更新 更多