regex - grep/pcregrep/sed/awk 最后一次匹配后到文件末尾的数据

标签 regex bash awk sed grep

我需要抓取最后一次匹配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.  

下面增长的文件:

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Éflã1»Âbπ¯Ú∞⁄äπHZ@F◊§•Ã*‹¡‹…ÿPkJòÑíòú˛¶à˛¨¢v|u«Ùbó–Ö¶¢∂5ıÜ@¨•˘®@W´≥‡*`H∑”ı–Só¬<˙ìEçöf∞Gg±:œe™flflå)A®  S\kÉflã1»Âbπ¯Ú∞⁄äπHZ@F◊§•Ã*‹¡‹…ÿPkJòÑíòú˛¶à˛¨¢v|u«Ùbó–Ö¶¢∂5ıÜ@¨•˘®@W´≥‡*`H∑”ı–Só¬<˙ìEçöf∞Gg±:œe™flflå)eq  
{
DATA
}if
ENTRY
(ÌSYõ˛9°\K¬∞≈fl|”/í÷L
Ö˙h/ÜÇi"û£fi±€ÀNéÓ›bÏÿmâ[≈4J’XPü´Z
oÜlø∫…qìõ¢,ßü©cÓ{—˜e&ÚÀÓHÏÜ‚m(Œ∆⁄ˆQ˝òêpoÉÄÂ(S‘E ⁄ !ŸQ§ô6ÉH

最佳答案

$ awk '/^[(]/{s="";} {s=s"\n"$0;} END{print substr(s,2);}' file
(ÌSYõ˛9°\K¬∞≈fl|”/í÷L
Ö˙h/ÜÇi"û£fi±€ÀNéÓ›bÏÿmâ[≈4J’XPü´Z
oÜlø∫…qìõ¢,ßü©cÓ{—˜e&ÚÀÓHÏÜ‚m(Œ∆⁄ˆQ˝òêpoÉÄÂ(S‘E ⁄ !ŸQ§ô6ÉH

工作原理

awk 逐行隐式循环文件。此脚本将我们要打印的任何内容存储在变量 s 中。

  • /^[(]/{s="";}

    每次我们找到以 ( 开头的行时,我们将 s 设置为空字符串。

    这样做的目的是删除最后一次出现以 (.

  • 开头的行之前的所有内容
  • s=s"\n"$0

    我们将当前行添加到 s 的末尾。

  • END{print substr(s,2);}

    到达文件末尾后,我们打印 s(省略第一个字符,这将是多余的换行符)。

关于regex - grep/pcregrep/sed/awk 最后一次匹配后到文件末尾的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32575732/

相关文章:

java - 正则表达式将名字/姓氏与可选标题相匹配

java - 需要帮助以Java创建正则表达式

bash - 变量替换(你怎么称呼/命名这个方法)?

bash - 如何模拟控制台应用程序的键盘输入?

unix - 如何从剪切命令获取倒数第二个字段

linux - 使用awk仅将文件中的数字与固定数字相乘

javascript - 从 JSON 中删除新行

regex - 您可以使用 sed 或 perl -pe 从二进制文件中删除一部分吗?

linux - 无法理解 setuid/setgid

shell - ubuntu中如何检查txt文件的分隔符