0

次のようなテキスト ファイルを想像してください。

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 の間の行だけを抽出するにはどうすればよいですか?

4

4 に答える 4

2

2つのパターン間の線を一致させるには、次を使用します。

/case 4\.1/,/endcase 4\.1/

このパターンに一致する行を印刷するには:

sed -n '/case 4\.1/,/endcase 4\.1/p' yourfile.txt
于 2012-10-04T08:59:00.703 に答える
1

たとえば、awkを使用できます。

awk '/^case 4.1/,/^endcase 4.1/' ./your_file
于 2012-10-04T08:57:52.137 に答える
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

これにより、ファイルが解析され、ケースごとに値が出力されます-特定のケースを探すのではなく、解析したい場合

于 2012-10-04T11:13:16.050 に答える
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
于 2012-10-04T13:30:17.250 に答える