我有控制台输出,如:
SECTION/foo
SECTION/fo1
SECTION/fo3
Foo = N
Fo1 = N
Fo2 = N
Fo3 = N
Bar = Y
作为输出,我希望:
Foo = N
Fo1 = N
Fo3 = N
任何(简单)解决方案?
提前致谢!
答案 0 :(得分:1)
Perl救援!
perl -ne ' $h{ ucfirst $1 } = 1 if m(SECTION/(.*));
print if /(.*) = / && $h{$1};
' < input
从包含SECTION/
的行创建哈希表。如果该行包含=
并且其左侧存储在哈希中,则会打印它。
答案 1 :(得分:1)
使用awk
即可:
awk -F' *[/=] *' '$1 == "SECTION" {a[tolower($2)]} tolower($1) in a' file
Foo = N
Fo1 = N
Fo3 = N
说明强>
' *[/=] *'
,这意味着/
或=
每边包含0个或更多空格。 SECTION
时,我们会将每个小写列2存储到数组a
a
中找到小写第一列时,我们会打印每一行(默认操作)。答案 2 :(得分:0)
这可能适合你(GNU sed):
sed -nr '/SECTION/H;s/.*/&\n&/;G;s/\n.*/\L&/;/\n(.*) .*\n.*\/\1/P' file
收集保留空间(HS)中的所有SECTION
行。双线并用换行符分隔。附加来自HS的收集行,并将从第一个换行到结尾的所有行转换为小写。使用反向引用将变量与截面后缀匹配,如果是,则仅打印第一行,即原始行未加粗。
N.B。 -n
调用sed的类似grep的性质,-r
减少了写正则表达式所需的反斜杠数。
答案 3 :(得分:0)
awk '$1 ~ /Foo|Fo1|Fo3/' file
Foo = N
Fo1 = N
Fo3 = N