寻找匹配并附加到linux / unix中匹配。也许是sed / awk
cat Data.txt
RMS_QUANTITY_RT
SMS_QUANTITY_RT
file.xml
<!-- dec=664, SMS_QUANTITY_RT -->
<!-- dec=664, RMS_QUANTITY_RT -->
预计结果
<!-- dec=664, SMS_QUANTITY_RT OK TO REMOVE -->
<!-- dec=664, RMS_QUANTITY_RT OK TO REMOVE-->
grep -f Data.txt file.xml | NOT SURE how to do this part
答案 0 :(得分:1)
您可以使用sed
替换一步完成所有操作。
sed 's/RMS_QUANTITY_RT\|SMS_QUANTITY_RT/& OK TO REMOVE/g'
我刚刚接受了两个搜索字词,并将它们作为&#39; OR&#39; sed
替换命令中的正则表达式。如果您有大量字符串,则可能更容易将列表放入sed
命令列表中,并使用-f
标志让sed从文件中读取脚本。
这里是如何工作的 - 在sed
的正则表达式替换中,&
是一个特殊的字符,它返回正则表达式的匹配字符串,所以我们的sed说匹配要么&#34; RMS_QUANTITY_RT&#34;或&#34; SMS_QUANTITY_RT&#34;然后将其替换为匹配的任何内容和静态字符串&#34;可以删除&#34;。
提供此示例输入:
$ cat xml.test
<!-- dec=664, SMS_QUANTITY_RT -->
<bad tag>
value value
</bad tag>
<!-- dec=664, RMS_QUANTITY_RT -->
<bad tag>
value value
</bad tag>
我们看到此输出运行命令:
$ sed 's/RMS_QUANTITY_RT\|SMS_QUANTITY_RT/& OK TO REMOVE/g' xml.test
<!-- dec=664, SMS_QUANTITY_RT OK TO REMOVE -->
<bad tag>
value value
</bad tag>
<!-- dec=664, RMS_QUANTITY_RT OK TO REMOVE -->
<bad tag>
value value
</bad tag>
修改它然后从文件中读取并编辑XML,我们使用一个简单的循环来读取文件行,然后执行sed -i
来替换它:
while read n; do sed -i "s/$n/& OK TO REMOVE/g" file.xml; done < Data.txt
在这里你可以看到这个工作:
$ cat file.xml
<!-- dec=664, SMS_QUANTITY_RT -->
<bad tag>
value value
</bad tag>
<!-- dec=664, RMS_QUANTITY_RT -->
<bad tag>
value value
</bad tag>
DATA.TXT:
$ cat Data.txt
RMS_QUANTITY_RT
SMS_QUANTITY_RT
运行代码后的file.xml内容:
$ while read n; do sed -i "s/$n/& OK TO REMOVE/g" file.xml; done < Data.txt
$ cat file.xml
<!-- dec=664, SMS_QUANTITY_RT OK TO REMOVE -->
<bad tag>
value value
</bad tag>
<!-- dec=664, RMS_QUANTITY_RT OK TO REMOVE -->
<bad tag>
value value
</bad tag>
答案 1 :(得分:1)
这适用于您的示例输入:
awk '
NR==FNR {ok[$1]=1; next}
$(NF-1) in ok {$NF = "OK TO REMOVE " $NF}
1
' Data.txt file.xml
第一行将Data.txt的内容存储在ok
数组的键中
如果在数组键中找到第二个最后一个字段,则第二行添加文本
第三行打印file.xml中的每一行