如何使用sed删除带通配符的字符串

时间:2009-10-20 06:57:48

标签: linux unix text sed

File1中:

<a>hello</b> <c>foo</d>
<a>world</b> <c>bar</d>

这是一个可以使用的文件示例。如何使用sed删除所有具有<c>*</d>的字符串?

3 个答案:

答案 0 :(得分:4)

以下行会删除<c></d>的所有文字:

sed -e 's/<c>.*<\/d>//'

s/...//中的位是一个正则表达式,而不是像shell一样使用的通配符,所以你可以放入正则表达式中的任何东西。

答案 1 :(得分:0)

如果您的所有数据都与示例的数据类似

# gawk 'BEGIN{FS=" <c>"}{print $1}' file
<a>hello</b>
<a>world</b>

答案 2 :(得分:0)

伟大的瑞士军刀!

我将其修改为从电子邮件中删除标题信息以获取归档脚本。它涉及使用日期和发件人信息重命名IMAP电子邮件(否则IMAP只编号为1,2,3等)。这是两个mod:

for i in $mailarray; do date -d $(less -f $i | grep -im 1 "Date:\ " | sed -e 's_^.*\(ate: \)__') +%F_%T%Z; done

for i in $mailarray; do less -f "$i" | grep -iEm 1 "From:\ " | sed -e 's_^.*\(rom\).*<\|^.*\(rom:\).__' | sed -e 's_@.*$__'; done

他们保存了大量无关的编码。谢谢。