作者 主題: 尋找特定字串後在替換不特定行數  (閱讀 2786 次)

0 會員 與 1 訪客 正在閱讀本文。

eric757

  • 可愛的小學生
  • *
  • 文章數: 8
    • 檢視個人資料
尋找特定字串後在替換不特定行數
« 於: 2004-08-01 08:02 »
各位好
我有很多程式裡面都有一個特定字CONTORLF
我要找到CONTROLF後在他底下第一個遇到的CASE 開始到第 一個遇到的
END CASE 之間的文字(可能有三行或四行,不一定)
都置換成我輸入好的特定兩行字 ,請問該怎麼做?
文字檔範例如下
      ON ACTION CONTROLZ
        CALL cl_show_req_fields()
     ON ACTION CONTROLG
        CALL cl_cmdask()
     ON ACTION CONTROLF                        
        CASE
           WHEN INFIELD(azm01)
              CALL cl_fldhlp('azm01')
           WHEN INFIELD(azm02)
              CALL cl_fldhlp('azm02')
           WHEN INFIELD(azm011)
              CALL cl_fldhlp('azm011')
         END CASE
     
ON ACTION CONTROLO      
         CASE                  
        IF INFIELD(azm01) THEN
           LET g_azm.* = g_azm_t.*
           DISPLAY BY NAME g_azm.*
           NEXT FIELD azm01
        END IF
     END CASE

elleryq

  • 區域板主
  • 鑽研的研究生
  • *****
  • 文章數: 908
  • 性別: 男
    • 檢視個人資料
    • Thinking more...
尋找特定字串後在替換不特定行數
« 回覆 #1 於: 2004-08-11 21:11 »
建議你研究 lex & yacc
Plan your work, then work your plan.
我的首頁:http://blog.elleryq.idv.tw
351899by http://counter.li.org

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17466
    • 檢視個人資料
    • http://www.study-area.org
尋找特定字串後在替換不特定行數
« 回覆 #2 於: 2004-08-12 01:46 »
try:
代碼: [選擇]
cat 1.txt | sed '1,/CONTROLF/d;/END CASE/,$d' | sed '$aEND CASE'

Sandro Chen

  • 懷疑的國中生
  • **
  • 文章數: 62
    • 檢視個人資料
Re: 尋找特定字串後在替換不特定行數
« 回覆 #3 於: 2004-08-13 09:28 »
引述: "eric757"
各位好
我有很多程式裡面都有一個特定字CONTORLF
我要找到CONTROLF後在他底下第一個遇到的CASE 開始到第 一個遇到的
END CASE 之間的文字(可能有三行或四行,不一定)
都置換成我輸入好的特定兩行字 ,請問該怎麼做?
文字檔範例如下
      ON ACTION CONTROLZ
        CALL cl_show_req_fields()
     ON ACTION CONTROLG
        CALL cl_cmdask()
     ON ACTION CONTROLF                        
        CASE
           WHEN INFIELD(azm01)
              CALL cl_fldhlp('azm01')
           WHEN INFIELD(azm02)
              CALL cl_fldhlp('azm02')
           WHEN INFIELD(azm011)
              CALL cl_fldhlp('azm011')
         END CASE
     
ON ACTION CONTROLO      
         CASE                  
        IF INFIELD(azm01) THEN
           LET g_azm.* = g_azm_t.*
           DISPLAY BY NAME g_azm.*
           NEXT FIELD azm01
        END IF
     END CASE

代碼: [選擇]

ex
`awk /BEGIN/ { flag = 0; }
   { if( match( $0,  "ON ACTION CONTROLF" )){
         flag = 1
      }
      if( flag == 1 && match($0, CASE) ){
      printf("%s,", NR)
      }
   if( flag == 1 && match( $0,  (END CASE) )
      print NR
      exit }`d
-1
i
預設要替換的字串
.
w
q


程式架構可以用上面的寫法
大概可以這樣試試, 有一段時間沒寫這種程式了...
所以細部在自己調整吧...
如果還沒解決的話...
hink Do, I Will
思考 行動, 我將能夠
Sandro Chen