选择性字符串操作

时间:2012-04-13 06:48:23

标签: string shell sed awk grep

我需要CSH / TCSH脚本中字符串处理的帮助。 我知道基本的处理,但需要帮助了解我们如何处理提前字符串操作要求。

我有一个日志文件,其格式如下:

  

[START_A]

     

A的日志信息

     

[END_A]

     

[START_B]

     

B的日志信息

     

[END_B]

     

[START_C]

     

C

的日志信息      

[END_C]

我的要求是有选择地在开始和结束标记之间提取内容并将它们存储在文件中。 例如,START_A和END_A之间的内容将存储在A.log

3 个答案:

答案 0 :(得分:1)

这应该适合你:

awk -F'_' '/\[START_.\]/{s=1;gsub(/]/,"",$2);f=$2".txt";next;}/\[END_.\]/{s=0} s{print $0 > f}' yourLog

<强>试验:

kent$  cat test
    [START_A]

    log info of A

    [END_A]

    [START_B]

    log info of B

    [END_B]

    [START_C]

    log info of C

    [END_C]


kent$  awk -F'_' '/\[START_.\]/{s=1;gsub(/]/,"",$2);f=$2".txt";next;}/\[END_.\]/{s=0} s{print $0 > f}' test

kent$  head *.txt
==> A.txt <==

    log info of A


==> B.txt <==

    log info of B


==> C.txt <==

    log info of C

答案 1 :(得分:0)

Awk可以一次做1个:

cat log | awk '/[START_A]/,/[END_A]/'

答案 2 :(得分:0)

这可能对您有用:

sed '/.*\[START_\([^]]*\)\].*/s||/\\[START_\1\\]/,/\\[END_\1\\]/w \1.log|p;d' file |
sed -nf - file