在我的shellscript代码中,我看到有一行正在使用sed命令处理Telephone编号。
sed "s~<Telephone type[ ]*=[ ]*\"fax\"[ ]*><Number>none[ ]*</Number></Telephone>~~g" input.xml > output.xml我不理解正则表达式的实际作用。
<Telephone type[ ]*=[ ]*\"fax\"[ ]*><Number>none[ ]*</Number></Telephone>我正在做revere工程来让它工作。
我的xml结构如下所示。
<ContactMethod>
<InternetEmailAddress>donald.francis@lexisnexis.com</InternetEmailAddress>
<Telephone type = "work">
<Number>215-639-9000 x3281</Number>
</Telephone>
<Telephone type = "home">
<Number>484-231-1141</Number>
</Telephone>
<Telephone type = "fax">
<Number>N/A</Number>
</Telephone>
<Telephone type = "work">
<Number>215-639-9000 x3281</Number>
</Telephone>
<Telephone type = "home">
<Number>484-231-1141</Number>
</Telephone>
<Telephone type = "fax">
<Number>none</Number>
</Telephone>
<Telephone type1 = "fax12234">
<Number>484-231-1141sadsadasdasdaasd</Number>
</Telephone>
</ContactMethod>发布于 2013-07-17 18:12:40
该正则表达式识别给定号为none的<Telephone type = "fax">条目,并删除它们。
细目:
用于“替换”的s sed命令。
~模式分隔符。您可以为此选择任何字符。sed可以识别它,因为它紧跟在s之后。
<Telephone type这与文字文本“<电话类型”匹配。
[ ]*匹配零个或多个空格。
=与文字"=“匹配
[ ]*匹配零个或多个空格。
\"fax\"与文字文本匹配。引号被转义,因为整个模式出现在引号内,但是shell在sed看到引号字符(\)之前将其删除。
[ ]*匹配零个或多个空格。
><Number>none与文字文本匹配。
[ ]*匹配零个或多个空格。
</Number></Telephone>与文字文本匹配。
~~模式分隔符结束搜索模式,并包含一个空的替换模式。
g是一个标志,表示将在每行上执行多次替换。
唯一让我困惑的是,这个模式不会匹配其中包含换行符的任何内容,所以我假设您的input.xml的格式实际上与示例数据中的格式不同?
https://stackoverflow.com/questions/17696430
复制相似问题