亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

提取兩個相同定界符(多實例定界符)之間的行

提取兩個相同定界符(多實例定界符)之間的行

烙印99 2021-04-06 16:25:20
我想要的是從第一次出現定界符到最后一次出現相同定界符,包括它們之間的所有內容,定界符可能在日志文件中多次出現。 sample.log[T=iaaaaaaaaa134]:SampleClass9: [T=iaaaaaaaaa134]:SampleClass7: [T=iaaaaaaaaa134]:SampleClass3: [T=iaaaaaaaaa134]:SampleClass1: [T=i8732jddcd234]:SampleClass1: [T=i8732jddcd234]:SampleClass2: [T=i8732jddcd234]:SampleClass3: [T=i8732jddcd234]:SampleClass4: Exception:NullPointerException:    sampte 1    sampte 1    sampte 1    sampte 1    sampte 1    [T=i8732jddcd234]:SampleClass00: [T=i8732jddcd234]:SampleClass00: [T=i8732jddcd234]:SampleClass00: [T=i8732jddcd234]:SampleClass00: [T=i8732jddcd234]:SampleClass00: Exception:NullPointerException2:    sampte 2    sampte 2    sampte 2    sampte 2    sampte 2[T=i8732jddcd234]:SampleClass12: [T=i8732jddcd234]:SampleClass32: [T=i8732jddcd234]:SampleClass22: [T=2eeeeeeeee234]:SampleClass32: [T=2eeeeeeeee234]:SampleClass82: [T=2eeeeeeeee234]:SampleClass22: [T=2eeeeeeeee234]:SampleClass22: 例如:我想提取從第一次出現的i8732jddcd234(定界符)到最近一次出現的i8732jddcd234及其之間的所有行??赡苁褂胊wk,sed,grep linux命令。因為這是linux服務器上的日志文件。我嘗試過awk /'i8732jddcd234','i8732jddcd234'/ test.log當然,這是行不通的
查看完整描述

3 回答

?
蝴蝶刀刀

TA貢獻1801條經驗 獲得超8個贊

以下內容awk可能對您有所幫助。


awk '/i8732jddcd234/{if(!first){first=FNR};end=FNR} {a[FNR]=$0} END{for(i=first;i<=end;i++){print a[i]}}'  Input_file

現在也添加非單一襯里形式的解決方案。


awk '

/i8732jddcd234/ {

   if (!first) {

      first = FNR

   }

   end = FNR

}

{

   a[FNR] = $0

}

END {

  for(i = first; i <= end; i++) {

     print a[i]

  }

}'  Input_file


查看完整回答
反對 回復 2021-04-16
?
慕萊塢森

TA貢獻1810條經驗 獲得超4個贊

last=$(nl sample.log | tac | awk '/i8732jddcd234/ {print $1; exit}')

sed -n "/i8732jddcd234/,${last}p" sample.log

或者,用awk進行2次遍歷文件:


awk -v code=i8732jddcd234 '

    NR == FNR {

        if ($0 ~ code) {

            if (!first) first=FNR

            last=FNR

        }

        next

    } 

    first <= FNR && FNR <= last

' sample.log sample.log


查看完整回答
反對 回復 2021-04-16
?
翻過高山走不出你

TA貢獻1875條經驗 獲得超3個贊

這可能對您有用(GNU sed):

sed '/i8732jddcd234/!d;:a;n;:b;//ba;$d;N;bb' file

刪除所有行,直到包含的行i8732jddcd234。打印包含的行i8732jddcd234,然后檢查下一行是否也行,是否重復。否則,請收集行,直到下次出現i8732jddcd234或文件結束為止,在這種情況下,可以刪除累積的行。


查看完整回答
反對 回復 2021-04-16
  • 3 回答
  • 0 關注
  • 312 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號