簡體   English   中英

bash,sed,awk:提取范圍內的行

[英]bash, sed, awk: extracting lines within a range

如何讓 sed 提取兩個模式之間的行,將該數據寫入文件,然后提取下一個范圍之間的行並將該文本寫入另一個文件? 例如,給定以下輸入:

pattern_a
line1
line2
line3
pattern_b
pattern_a
line4
line5
line6
pattern_b

我希望 line1 line2 和 line3 出現在一個文件中,而 line4 line5 和 line6 出現在另一個文件中。 如果不使用循環並在循環的迭代之間維護一些 state,我看不到這樣做的方法,其中 state 告訴您 sed_ 必須開始搜索的位置再次開始搜索。

例如,在類似 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 會更好?

這個怎么樣:

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

這將為每個范圍創建一個outfile_x

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM