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(脚本只会知道,如果它发现另一行以方括号开头和结尾,则终止前一组),我会更高兴。
每当面对文本处理问题时,有人会说“让我们使用 awk”。通常情况下,他们有一个解决方案。
awk '
/^\[.*\]$/ {group = $0}
group == "[group1]" && $1 == "MyParameter" {found=1; exit}
END {exit !found}
'
Run Code Online (Sandbox Code Playgroud)