如何使用sed提取文本

Viv*_*ek 4 sed text-processing

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

例如,在这一行中:

string>![TEST[Extract this string]>/string>
Run Code Online (Sandbox Code Playgroud)

我想得到

Extract this string 
Run Code Online (Sandbox Code Playgroud)

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

Cyr*_*rus 6

sed -e 's/string>!\[TEST\[\(.*\)]>\/string>/\1/' file
Run Code Online (Sandbox Code Playgroud)

或者

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

输出:

提取这个字符串


Arc*_*ege 5

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

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

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