0

我有一个字符串,可以说:

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

我想使用 sed 摆脱<ic>and</ic>标签,以及文字标签<lic></lic>

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

任何帮助总是很感激,在此先感谢!

4

4 回答 4

3

仅删除标签:

sed -i.old -r 's;</?l?ic>;;g' infile
于 2012-05-22T04:18:57.010 回答
3
sed -e 's%</\{0,1\}l\{0,1\}ic>%%g'

这是在 PCRE中编写等价物\{0,1\}的标准方式。正则表达式用于分隔位;然后在每行输入中全局查找可能后跟一个斜线,可能后跟一个,然后将其替换为空。sed?%<lic>

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

于 2012-05-22T04:21:33.450 回答
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

于 2012-05-22T04:56:10.960 回答
1

您的标签具有左括号结构,后跟许多不是右括号的字符,最后是右括号。所以让我们这样写:

sed 's/<[^>]*>//g'
于 2012-05-22T04:19:17.260 回答