..我知道为什么:
我有一个xml文档,里面包含很多信息。我需要提取所需的内容,并最终将它们打印在新文件上。
xml(好吧,它的一部分..行不断重复)
<module classname="org.openas2.processor.receiver.AS2DirectoryPollingModule"
outboxdir="%home%/../../../home/samba/user/Outbound/toMartha/"
errordir="%home%/../../../home/samba/user/Outbound/toMartha/error"
sentdir="%home%/../../../home/samba/user/data/Sent/Martha"
interval="600"
defaults="sender.name=me_myself, receiver.name=Martha"
sendfilename="true"
mimetype="application/standard"/>
<module classname="org.openas2.processor.receiver.AS2DirectoryPollingModule"
outboxdir="%home%/../../../home/samba/user/Outbound/toJosh/"
errordir="%home%/../../../home/samba/user/Outbound/toJosh/error"
sentdir="%home%/../../../home/samba/user/data/Sent/Josh"
interval="600"
defaults="sender.name=me_myself, receiver.name=Josh"
sendfilename="true"
mimetype="application/standard"/>
<module classname="org.openas2.processor.receiver.AS2DirectoryPollingModule"
outboxdir="%home%/../../../home/samba/user/Outbound/toPamela/"
errordir="%home%/../../../home/samba/user/Outbound/toPamela/error"
interval="600"
defaults="sender.name=me_myself, receiver.name=Pamela"
sendfilename="true"
mimetype="application/standard"/>
我需要在“出站”之后提取文件夹,并用引号或斜杠将其清除。另外,我需要排除“ /错误”,因此每个错误仅得到1个结果。
我的命令是:
grep -o -v "/error" "Outbound/" config.xml | awk -F"Outbound/" '{print $2}' | sed -e "s/\/\"//g" > /tmp/sync_users
错误是:grep: Outbound/: No such file or directory
这当然意味着我给grep了太多的参数(?)-如果我删除了-v "/error"
它,那会起作用,但也会打印带有/ error的名称。
有人能帮我吗?
编辑:正如在他们的示例中指出的(感谢您投入的时间),我需要根据上面的示例提取这些单词:
toMartha
toJosh
toPamela
要给grep倍数模式,它们必须用换行符分隔或由倍数模式选项(-e,F,..)指定。但是,-v总体上将匹配反转,您不能仅反转一个。
对于您需要执行的操作,可以使用PCRE(-P参数)进行环视功能:
grep -o -P '(?<=Outbound\/)[^\/]+(?!.*\/error)' config.xml
正则表达式演示在这里
正则表达式尝试
[^\/]+
Outbound/
正回顾后发(?<=Outbound\/)
/error
的否定前瞻(?!.*\/error)
在您的第一个示例输入中:
$ grep -o -P '(?<=Outbound\/)[^\/]+(?!.*\/error)' test.txt
toMartha
toJosh
toPamela
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句