仅在文件的一部分中查找字符串(如 grep -q)

twb*_*mer 4 shell grep awk text-processing

我想编写一些 Bash 来验证配置文件中是否存在字符串。我无法更改文件格式,它属于不同的应用程序。

该文件被细分为由方括号中的字符串命名的组。

这应该是成功的:

[group1]
MyParameter
junk1
junk2

[group2]
junk3
junk4
Run Code Online (Sandbox Code Playgroud)

这应该是一个错误:

[group1]
junk1
junk2

[group2]
MyParameter
junk3
junk4
Run Code Online (Sandbox Code Playgroud)

我可以做 agrep -q来验证MyParameter文件中是否存在,但如果它位于其他组中而不是group1,那么我仍然被破坏。

如果MyParameter两个组中都存在,我就不会在意标记错误,只要它存在于group1.

我不能依赖行号(头、尾等)。另外,如果它足够通用而不依赖于名称group2(脚本只会知道,如果它发现另一行以方括号开头和结尾,则终止前一组),我会更高兴。

Gil*_*il' 7

每当面对文本处理问题时,有人会说“让我们使用 awk”。通常情况下,他们有一个解决方案。

awk '
    /^\[.*\]$/ {group = $0}
    group == "[group1]" && $1 == "MyParameter" {found=1; exit}
    END {exit !found}
'
Run Code Online (Sandbox Code Playgroud)