我有一个文本文件,只想使用 . 提取以特定字符串开头和结尾的文本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'
s
in 命令采用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