我有以下 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 脚本循环中,您可以轻松处理多个文件。