grep 两个 xml 标签并使用单个命令打印其输出

grep 两个 xml 标签并使用单个命令打印其输出

我有以下 xml 结构,并希望使用 grep 从单个命令中提取标签 CUSTOMER_ID 和 STORE_ID 的前两个字母。我可以使用以下命令对单个标签执行此操作:

grep -oP '(?<=< STORE_ID >).*(?=< /STORE_ID >)' filename.* | awk '{print substr($0,2,2)}'
<CUSTOMER_ID>12345678910</CUSTOMER_ID>
<FIRSTNAME>Shubham</FIRSTNAME>
<LASTNAME>Anand</LASTNAME>
<STORE_ID>mystore</STORE_ID>

如何为两个或更多标签做到这一点?

输出应该在一行中。例如,在上述情况下,结果应该是 12 my

注意:我想要多个文件的输出。所以我需要把filename.*

答案1

根据您提供的示例输入和输出,以下是sed单个文件的简单解决方案infile

$ cat infile
<CUSTOMER_ID>12345678910</CUSTOMER_ID>
<FIRSTNAME>Shubham</FIRSTNAME>
<LASTNAME>Anand</LASTNAME>
<STORE_ID>mystore</STORE_ID>

$ sed -n -e 's/<CUSTOMER_ID>\(..\)\(.*\)<.*>/\1/p' -e 's/<STORE_ID>\(..\)\(.*\)<.*>/\1/p' infile | sed '$!N;s/\n/ /'
12 my
$

通过将上述内容包装在简单的 shell 脚本循环中,您可以轻松处理多个文件。

相关内容