0

在我的shellscript代码中,我看到有一行Telephone使用sed命令处理数字。

sed "s~<Telephone type[ ]*=[ ]*\"fax\"[ ]*><Number>none[ ]*</Number></Telephone>~~g" input.xml > output.xml

我不明白正则表达式的实际作用。

<Telephone type[ ]*=[ ]*\"fax\"[ ]*><Number>none[ ]*</Number></Telephone>

我正在做崇高的工程来让它发挥作用。

我的 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>
4

1 回答 1

1

该正则表达式识别<Telephone type = "fax">编号为 的条目none,并删除它们。

分解:

s“替换”的 sed 命令。

~模式分隔符。您可以为此选择任何字符。sed 识别它,因为它紧跟在s.

<Telephone type这与文字文本“<电话类型”相匹配。

[ ]*匹配零个或多个空格。

=匹配文字“=”

[ ]*匹配零个或多个空格。

\"fax\"匹配文字文本。引号被转义了,因为整个模式出现在引号内,但是 shell\在 sed 看到它们之前删除了引号字符 ( )。

[ ]*匹配零个或多个空格。

><Number>none匹配文字文本。

[ ]*匹配零个或多个空格。

</Number></Telephone>匹配文字文本。

~~模式分隔符结束搜索模式,并围绕一个空的替换模式。

g是一个标志,表示将在每一行上多次执行替换。

唯一让我感到困惑的是,这种模式不会匹配任何有换行符的东西,所以我认为你input.xml的格式实际上并没有像你在示例数据中那样格式化?

于 2013-07-17T10:12:40.300 回答