想象一下文本文件,如下所示:
Case 4
case 4.1
a 3
a 5
a 7
a 1
a 9
a 4
endcase 4.1
//
.
.
. Do things that dont get parsed
.
.
//
case 4.2
a 1
b 3
a 6
b7
endcase 4.2
endcase 4
//
.
.
.
. More things
.
.
//
case 5
.
.
.
.
endcase 5
包含不同时间点的多个变量的值。例如,案例4涉及变量a和b。如何仅提取说明案例4.1和结束4.1之间的界限?
答案 0 :(得分:2)
要匹配两种模式之间的线条,请使用:
/case 4\.1/,/endcase 4\.1/
打印与此模式匹配的行:
sed -n '/case 4\.1/,/endcase 4\.1/p' yourfile.txt
答案 1 :(得分:1)
您可以使用awk,例如:
awk '/^case 4.1/,/^endcase 4.1/' ./your_file
答案 2 :(得分:0)
#!/bin/bash
IFS=$'\n';
line="$(cat case.txt)"
for lines in ${line}
do
if [[ $lines =~ case(.*)$ ]]; then
caseid=`echo "${BASH_REMATCH[1]}"`
echo "----> $caseid"
fi
if [[ $lines =~ endcase ]]; then
caseid="0"
fi
if [ "$caseid" != "0" ]; then
echo $caseid -- $lines;
fi
done
这将解析文件并为每个案例打印出值 - 如果你想解析而不是寻找特定的案例
答案 3 :(得分:0)
如果要打印特定的子案例块:
awk -v casenum=4.1 '
$1 == "case" && $2 == casenum {prnt = 1}
prnt
$1 == "endcase" && $2 == casenum {prnt = 0}
' filename
如果要打印所有子类:
awk '
$1 == "case" && $2 ~ /^[0-9]+\.[0-9]+/ {casenum = $2; prnt = 1}
prnt
$1 == "endcase" && $2 == casenum {prnt = 0}
' filename