我需要 CSH/TCSH 脚本中的字符串处理方面的帮助。我知道基本处理,但需要帮助了解我们如何处理高级字符串操作要求。
我有一个日志文件,其格式如下:
[开始一个]
A的日志信息
[END_A]
[START_B]
B的日志信息
[END_B]
[START_C]
C的日志信息
[END_C]
我的要求是选择性地提取开始和结束标记之间的内容并将它们存储在一个文件中。例如 START_A 和 END_A 之间的内容将存储在 A.log
这应该适合你:
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
awk 一次可以做 1 个:
cat log | awk '/[START_A]/,/[END_A]/'
这可能对您有用:
sed '/.*\[START_\([^]]*\)\].*/s||/\\[START_\1\\]/,/\\[END_\1\\]/w \1.log|p;d' file |
sed -nf - file