使用sed-linux命令
在我的使用sed-linux命令,linux,shell,sh,Linux,Shell,Sh,在我的shell脚本代码中,我看到有一条线路正在使用sed命令处理电话号码 sed "s~<Telephone type[ ]*=[ ]*\"fax\"[ ]*><Number>none[ ]*</Number></Telephone>~~g" input.xml > output.xml sed“s~none[]*~~g”input.xml>output.xml 我不理解正则表达式的实际功能 <Telephone type[ ]*
shell脚本
代码中,我看到有一条线路正在使用sed
命令处理电话
号码
sed "s~<Telephone type[ ]*=[ ]*\"fax\"[ ]*><Number>none[ ]*</Number></Telephone>~~g" input.xml > output.xml
sed“s~none[]*~~g”input.xml>output.xml
我不理解正则表达式的实际功能
<Telephone type[ ]*=[ ]*\"fax\"[ ]*><Number>none[ ]*</Number></Telephone>
none[]*
我正在做里维尔工程来让它工作
我的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>
唐纳德。francis@lexisnexis.com
215-639-9000 x3281
484-231-1141
不适用
215-639-9000 x3281
484-231-1141
没有一个
484-231-1141ADSADASD
正则表达式识别编号为none
的
条目,并将其删除
细分:
s
sed命令用于“替换”
~
图案分隔符。您可以为此选择任何字符。sed重新编码它,因为它紧跟在s
之后
none
与文本匹配
[]*
匹配零个或多个空格
与文本匹配
~~
模式分隔符结束搜索模式,并包围一个空的替换模式
g
是一个标志,表示替换将在每行上执行多次
唯一让我困惑的是,这个模式与任何有换行符的模式都不匹配,因此我假设您的
input.xml
的格式与示例数据中的格式不同?sed“s~text~~g”文件
将删除出现在文件
中的任何文本
。sed
是否识别\s
中的空白?如果是这样的话,最好是推荐超过[]
?@特洛伊木马:没有人推荐任何东西。也就是说,我不确定\s
的可移植性有多好,但我怀疑OP是否在乎。您可以使用sed执行[[:space:]
,但它仍然处理行,因此您不会找到任何换行符。有一些习惯用法(“idia”?)可以在保留空间中累积行,但由于sed命令都是一个字符,我发现很快就无法读取\@格伦尼查克曼:同意(除非复数通常只有在单数为“idium”时才是“idia”…英语拼写实际上并不那么可靠)。