为什么以下给出了我正在搜索的行:
grep '<appointment-id internal:ref=1.2.3/>' test.xml
OUTPUT is <appointment-id internal:ref=1.2.3/>
虽然以下将其分成两行?
a=($(grep '<appointment-id internal:ref=1.2.3/>' test.xml))
for i in "${a[@]}"; do
echo "checking $i"
grep -n "$i" delete.xml
done
输出是:
checking <appointment-id
checking internal:ref=1.2.3/>
该文件是:
<note>
<to>Jim</to>
<from>John</from>
<heading>Reminder</heading>
<body>Some text</body>
<appointment-id internal:ref=1.2.3/>
</note>
的输出
grep
是一个包含两个以空格分隔的单词的字符串。shell 会将其拆分为两个单词,因为它没有被引用,因此数组将有两个条目。
这将做你想做的:
然而,解析 XML
grep
是一个可怕的想法。请改用适当的 XML 解析器。此外,循环,如果它所做的只是输出一个字符串,则可以替换为
git
要查看谁对与 -控制文件的特定修订版中的模式匹配的行进行了更改(请参阅下面的注释),请使用git blame -L
有问题的模式和修订版。有关详细信息,请参阅git blame --help
。另请注意,要获取与模式匹配的行的行号:
永远不要为了获取行号而再次
grep
输入 into的结果。grep
如果这样做,请务必使用grep -F
,否则如果该行包含正则表达式模式,它将失败。