【问题标题】:bash, sed, awk: extracting lines within a rangebash,sed,awk:提取范围内的行
【发布时间】:2011-09-10 14:08:40
【问题描述】:

如何让 sed 提取两个模式之间的行,将该数据写入文件,然后提取下一个范围之间的行并将该文本写入另一个文件?例如给定以下输入:

pattern_a
line1
line2
line3
pattern_b
pattern_a
line4
line5
line6
pattern_b

我希望 line1 line2 和 line3 出现在一个文件中,而 line4 line5 和 line6 出现在另一个文件中。如果不使用循环并在循环的迭代之间保持某种状态,我看不到这样做的方法,其中状态告诉您 sed 必须从哪里开始搜索以再次寻找开始模式 (pattern_a)。

例如,在类似 bash 的伪代码中:

while not done
  if [[ first ]]; then
    sed -n -e '/pattern_a/,/pattern_b/p' > $filename
  else
    sed -n -e '$linenumber,/pattern_b/p' > $filename
  fi
  linenumber = last_matched_line
  filename = new_filename

有没有使用 sed 的绝妙方法?还是 awk 会更好?

【问题讨论】:

    标签: bash sed awk


    【解决方案1】:

    这个怎么样:

    awk '/pattern_a/{f=1;c+=1;next}/pattern_b/{f=0;next}f{print > "outfile_"c}' input_file
    

    这将为每个范围创建一个outfile_x

    【讨论】:

    • 空白是免费的,不要害怕
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 2013-01-07
    • 1970-01-01
    • 2011-02-07
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多