UNIX:使用sed消除和替换字符串中的东西?

时间:2012-05-22 04:10:30

标签: regex string unix sed awk

我有一个字符串,让我们说:

<lic><ic>This is a string</ic>, welcome to my blog.</lic>

我想使用sed来删除<ic></ic>标记,以及文字标记<lic></lic>

最快的方法是什么?我对sed很新。怎么会在awk中完成? 我知道awk对于类似列的文本要好得多,所以我更倾向于学习如何使用sed。

提前感谢任何帮助!

4 个答案:

答案 0 :(得分:3)

仅删除标签:

sed -i.old -r 's;</?l?ic>;;g' infile

答案 1 :(得分:3)

sed -e 's%</\{0,1\}l\{0,1\}ic>%%g'

\{0,1\}是在PCRE中编写等效sed的标准?方式。正则表达式使用%来分隔位;然后查找<可能后面跟一个斜杠,可能后跟一个l,然后是ic>,并在每行输入中全局替换它。

sed的某些版本允许您指定正则表达式的替代系统,但这适用于任何地方。

答案 2 :(得分:2)

sed不需要复杂。以下是两种简单的方法来做你想做的事。

这匹配那些确切的模式并将其全局删除:

sed -e "s%\(<lic>\|</lic>\|<ic>\|</ic>\)%%g" file.txt

请记住,如有必要,您可以使用sed设置多个表达式:

sed -e "s%<lic>%%" -e "s%</lic>%%" -e "s%<ic>%%" -e "s%</ic>%%" file.txt

答案 3 :(得分:1)

你的标签有一个左括号结构,后跟一些不是右括号的字符,最后是一个右括号。所以让我们这样写:

sed 's/<[^>]*>//g'