如何使用 sed 提取文本

如何使用 sed 提取文本

我有一个文本文件,只想使用 . 提取以特定字符串开头和结尾的文本sed

例如,在该行中:

string>![TEST[Extract this string]>/string>

我想要得到

Extract this string 

您将如何实现这一点sed?基本上我想获取以表达式“ string>![TEST[”开头并以表达式“ ]>/string>”结尾的文本。

答案1

sed -e 's/string>!\[TEST\[\(.*\)]>\/string>/\1/' file

或者

sed -e 's|string>!\[TEST\[\(.*\)]>/string>|\1|' file

输出:

提取这个字符串

答案2

您不仅需要告诉字符串要匹配什么,还需要告诉字符串要保存什么:

sed -ne 's@string>!\[TEST\[\([^]]*\)\]>/string>@\1@gp'

sin 命令采用sed两个参数:正则表达式和替换字符串。通常,/分隔符用于分隔两者,但您可以使用任何字符,在本例中为@。正则表达式中有一些特殊字符,如[, ]\如果您想要真实的字符,则需要用 来引用这些字符,例如string>!\[。捕获\([^]]*\)方括号之间的所有内容。并且\1将字符串替换为与正则表达式匹配的字符串。最后是@gp,它告诉发送以在行 ( g) 上进行多次匹配并打印替换的行(在我们告诉sed不要使用选项打印行之后-n

答案3

使用 Awk 的简单方法:

awk -F'[][]' '{print $3}' file

答案4

通过 GNU grep

$ echo 'string>![TEST[Extract this string]>/string> foo bar string>![TEST[Extract this string]>/string>' | grep -oP 'string>!\[TEST\[\K.*?(?=]>/string>)'
Extract this string
Extract this string

相关内容