可能重复:
bash, parsing part of a file

Case 4
case 4.1
a 3
a 5
a 7
a 1
a 9
a 4
endcase 4.1
//
.
.
. Do things that don't get parsed
.
.
//
case 4.2
a 1
b 3
a 6
b7
endcase 4.2
endcase 4
//
.
.
.
. More things
.
.
//
case 5
.
.
.
.
endcase 5

考虑到上面的示例文件。指挥部
awk'/^case 4.2/,/^endcase 4.2/'./my_file.txt
将仅从文件中提取所需节中包含的信息。
那么,我如何从这个小部分中只提取以“a”开头的行呢?我的文件比示例复杂一些,但我认为逻辑仍然适用。

最佳答案

你可以用sed来做:

sed -n -e '/^case 4[.]2/,/^endcase 4[.]2/ { /^a/p }' my_file.txt

-n告诉sed只打印我们告诉它的行。大括号是一组命令,通过使用的地址前缀(与awk中使用的地址前缀相同),我们保证它们只在case块中执行。该组只包含一个命令,即“p”打印命令。但是,我们用另一个地址前缀作为这个命令的前缀。这个命令告诉它只有当行以“a”开头时才执行。
通过嵌套地址,我们可以执行“case 4.2”和“endcase4.2”行之间的命令,这些命令以“a”文本开头。
希望这有帮助=)

09-11 23:23