Pum*_*use 3 regex bash awk grep sed
我需要在ENTRY的最后一个匹配到文件末尾之后抓取内容,我似乎无法做到.它可以是多行,数据可以包含文件末尾的任何字符,包括(,\n,).
我试过了:
tail -1 file # doesn’t work due to it not consistently being one line
grep "^(.*" # only grabs one line
pcregrep -M '\n(.*' file # I think a variation of this is the solution, but I’ve had no luck so far.
Run Code Online (Sandbox Code Playgroud)
文件增长如下:
TOP OF FILE
%
ENTRY
(S®s
?6ûí?‹ôTìßÅDPˆ¬k·Ù"=ÓxF)*†‰ú?ÃQ´¿J‘\˜©ŒG»‡?QÆ’<?sµ-ù±ñ?NäAOilWçk
N+P}V<ôÒ??µ?W*`Hß”;–GØ»14?åR"ºã
FD‘mÍõ?*ÊÎÉC)(S®s
?6ûí?‹ôTìßÅDPˆ¬k·Ù"=ÓxF)*†‰ú?ÃQ´¿J‘\˜©ŒG»‡?QÆ’<?sµ-ù±ñ?NäAOilWçk
N+P}V<ôÒ??µ?W*`Hß”;–GØ»14?åR"ºã
FD‘mÍõ?*ÊÎÉC)eq
{
DATA
}
ENTRY
(A® S\kÉ?ã1»Âb?¯Ú??ä?HZ@F?§•Ã*‹¡‹…ÿPkJòÑíòú?¶à?¨¢v|u«Ùbó–Ö¶¢?5?Ü@¨•?®@W´?‡*`H?”?–Só¬<?ìEçöf??Gg±:œe™??å)A® S\kÉ?ã1»Âb?¯Ú??ä?HZ@F?§•Ã*‹¡‹…ÿPkJòÑíòú?¶à?¨¢v|u«Ùbó–Ö¶¢?5?Ü@¨•?®@W´?‡*`H?”?–Só¬<?ìEçöf??Gg±:œe™??å)eq
{
DATA
}if
ENTRY
(ÌSYõ?9°\K¬???|”/í÷L
Ö?h/ÜÇi"û£?±€ÀNéÓ›bÏÿmâ[?4J’XPü´Z
oÜlø?…qìõ¢,ßü©cÓ{—˜e&ÚÀÓHÏÜ‚m(Œ??ˆQ?òêpoÉÄÂ(S‘E ? !ŸQ§ô6ÉH
Run Code Online (Sandbox Code Playgroud)
$ awk '/^[(]/{s="";} {s=s"\n"$0;} END{print substr(s,2);}' file
(ÌSYõ?9°\K¬???|”/í÷L
Ö?h/ÜÇi"û£?±€ÀNéÓ›bÏÿmâ[?4J’XPü´Z
oÜlø?…qìõ¢,ßü©cÓ{—˜e&ÚÀÓHÏÜ‚m(Œ??ˆQ?òêpoÉÄÂ(S‘E ? !ŸQ§ô6ÉH
Run Code Online (Sandbox Code Playgroud)
awk隐式循环遍历文件.此脚本存储我们要在变量中打印的内容s.
/^[(]/{s="";}
每当我们找到一个以...开头的行时(,我们就会设置s为空字符串.
这样做的目的是在最后一次出现的行之前删除所有内容(.
s=s"\n"$0
我们将当前行添加到末尾s.
END{print substr(s,2);}
在我们到达文件末尾之后,我们打印s(省略第一个字符,它将是一个多余的换行符).