【发布时间】:2020-06-30 14:58:16
【问题描述】:
我需要使用 sed 提取第一次出现的单词“BEGIN”和最后出现的单词“END”之间的文本。
输入:
line1
BEGIN
line2
line3
END
line4
line5
BEGIN
line6
line7
ENDED
END
line8
END
line9
line10
预期输出:
BEGIN
line2
line3
END
line4
line5
BEGIN
line6
line7
ENDED
END
line8
END
我的方法:
它提取 BEGIN 和 END 之间的文本。这里有两个 BEGIN & END 语句,我的解决方案是在这些单词之间提取文本。 我的解决方案无法在 word1 的第一次出现(BEGIN)和 word2 的最后一次出现(END)之间提取文本。
dsonachalam$ sed -n -e '/^BEGIN$/,/^END$/p' logs.txt
BEGIN
line2
line3
END
BEGIN
line6
line7
ENDED
END
【问题讨论】:
-
你基本上已经缓冲了从最后一个 END 到下一个保持空间的行。 #1。找到开始。 #2。找到 END。 #3。在保持空间中缓冲每一行。 #4。如果您的行是 END,则打印保持空间,清除保持空间并转到第 3 步。
-
使用
ed:printf "%s\n" "/BEGIN/,?END?p" | ed -s logs.txt
标签: sed