【问题标题】:How to print after a match and until another match如何在一场比赛后打印,直到另一场比赛
【发布时间】:2016-06-05 14:34:39
【问题描述】:

我正在尝试制作一个脚本,以便从一个大文本文件中提取一定数量的行。我有一个 id 文件,其中包含要在主文件中查找的 id 编号,当找到匹配项时,我想打印出某些字段,直到找到结束字符串。然后我想在读取下一个 id-number 之前查找第一行包含相同 id-number 的所有文本行,并重新启动该过程,直到所有 id-number 都被测试。

文本文件如下:(开头格式不正确)

“part_1/group_01/p1_g01_f1_1_t-a0001”

1779 1866 h 哈尔 1866 年 1945 年“A: 1945 1991 ddu 1991 2049 "}: 2049 2115 n noen 2115 2260 ""u: 2260 2319 @ 2319 2376 N 2376 2399 g gang 2399 2514 "A 2514 2601 N 2601 2701 s sett 2701 2768 "e 2768 2804 t 2804 2909 s stokkmaur 7850 8906 <end> <end> . "part_1/group_01/p1_g01_f1_1_t-a0002" 0 1617 <start> <start> 1617 1709 f Frå 1709 1776 4 1776 1846 "O: 1846 1909 n neste 1909 2013 ""{ 2013 2101 s 2101 2177 t 2177 2216 @ 2216 2286 v veke 2286 2467 ""e: 2467 2549 k 2549 2601 @ 2601 2755 "A: av 2755 2823 v vert 2823 2930 "{ 2930 2986 <end> <end>

id 文件如下所示:

a0002 b0507 c0576

等等

所以我希望脚本在包含数字 a0002 的文本文件 (trans.txt) 中找到第一个匹配项,然后打印出所有内容,直到它与结束字符串匹配,然后打印出第一行所在的下一个行序列匹配 a0002 直到找到所有匹配项。然后我想从 id-file (b0507) 中读取下一个 id-number 并重复整个过程,直到读取所有 id-number。

【问题讨论】:

    标签: regex sh


    【解决方案1】:

    对于任意一个id搜索,可以使用sed如下,例如

    sed -n "/a0002/,/<end>/p" file
    

    这会抑制正常输出,直到找到 a0002,然后打印通过下一次出现 &lt;end&gt; 的所有行。

    输出

    "part_1/group_01/p1_g01_f1_1_t-a0002"
    0   1617    <start> <start>
    1617    1709    f   Frå
    1709    1776    4
    1776    1846    "O:
    1846    1909    n   neste
    1909    2013    ""{
    2013    2101    s
    2101    2177    t
    2177    2216    @
    2216    2286    v   veke
    2286    2467    ""e:
    2467    2549    k
    2549    2601    @
    2601    2755    "A: av
    2755    2823    v   vert
    2823    2930    "{
    2930    2986    <end>   <end>
    

    要从一个单独的 id-file 中读取所有 id(由空白字符分隔)并在 parts-file 中找到每个 id,请使用:

    for i in $(< id-file); do
        sed -n "/$i/,/<end>/p" parts-file
    done
    

    这将对 id-file 中的每个 id 执行相同的操作(例如 a0002b0507c0576

    【讨论】:

    • 当然,很高兴我能帮上忙。 sed 是一个很棒的工具。如果答案有帮助,请不要忘记通过检查问题左上角的绿色箭头来选择我的答案是否有帮助。
    猜你喜欢
    • 1970-01-01
    • 2013-07-25
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-23
    • 2015-09-16
    • 2012-03-27
    相关资源
    最近更新 更多