Linux grep 表达式停止匹配,直到找到窗口回车符



有谁知道一个shell命令(egrep,grep(来查找多行的匹配项?

这是我的部分数据:

/id D4333F9F; Fri, 23 Mar 2018 16:12:13 -0300 (-03)^M
Subject: =?UTF-8?Q?(Observado)=20[Chamado=202223936]=20-=20?=  =?UTF-8?Q?> Configura=C3=A7=C3=A3o=20DNS?=^M
Date: Fri, 23 Mar 2018 16:12:13 -0300^M
Content-Type: text/html; charset=UTF-8^M
Content-Transfer-Encoding: quoted-printable^M
Content-Disposition: inline^M
MIME-Version: 1.0^M

在我在这里的抨击中,我试图找到一个表达方式:">

/id D4333F9F.*

(注意.*正则表达式以选择所有内容,直到文件结束(

窗口上插入的命令正在模拟grep命令,但我的搜索停止^M字符

我想继续搜索,直到标题邮件MIME-Version(这是一个雷鸟文件(。

为了简化起见,让我们考虑一下这个文件:

$ cat file
before
/id D4333F9F 1234
another line
last line in file

您遇到的问题不是^M。 标准grep一次只处理一行。

使用 sed

要获取从包含/id D4333F9F的行到文件末尾的所有内容,您可以使用几种标准工具。 例如,尝试sed

$ sed -n '//id D4333F9F/,$ p' file
/id D4333F9F 1234
another line
last line in file

在这里//id D4333F9F/,$ p告诉 sed 打印任何以与/id D4333F9F匹配的行开头并以最后一行 ($( 结尾的行。

使用 awk

尝试awk

$ awk '//id D4333F9F/{f=1} f' file
/id D4333F9F 1234
another line
last line in file

在这里,//id D4333F9F/{f=1}告诉awk在找到与/id D4333F9F匹配的第一行时将变量f设置为1。 最后一个f是速记,告诉awk打印f是否为真(意味着非空或非零(。

将 grep 与 GNU 扩展一起使用

最后,如果你的grep-P扩展名(这需要GNU grep(,那么试试:

$ grep -ozP '(?s)/id D4333F9F.*' file
/id D4333F9F 1234
another line
last line in file

这里详细解释了这个 grep 代码。

最新更新