簡體   English   中英

使用sed linux命令

[英]Working with sed linux command

在我的shellscript代碼中,我看到有一行正在使用sed命令處理Telephone號碼。

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>

該正則表達式可識別<Telephone type = "fax">條目,其中編號為none條目將被刪除。

分解:

s為“取代” sed命令。

~模式分隔符。 您可以為此選擇任何字符。 sed重新識別它是因為它緊隨s

<Telephone type匹配文字文本“ <電話類型”。

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

=匹配文字“ =“

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

\\"fax\\"匹配文字。 因為整個模式都出現在引號內,所以引號被轉義,但是在sed看到它們之前,shell刪除了引號字符( \\ )。

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

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

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

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

~~模式分隔符結束搜索模式,並包圍一個空的替換模式。

g是一個標志,表示替換將在每行上執行多次。

唯一令我困惑的是,該模式將不匹配任何包含換行符的內容,因此我認為您的input.xml格式實際上不像示例數據中的格式嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM