我有一个文件 named.conf ,首先我需要找到 himanshu.com ,然后提取相应的区域文件,即 for1 ,我不知道将哪些参数传递给 awk 脚本以查找下面的两行模式。
的named.conf
options {
directory "/var/named";
};
zone "himanshu.com" in {
type master;
file "for1";
};
zone "0.168.192.in-addr.arpa" in {
type master;
file "rev";
};
答案 0 :(得分:1)
$ awk -v RS="" -F'\n' '/zone "himanshu.com"/{for(i=1;i<=NF;i++)if($i~/^file /)print $i}' file
file "for1";
上述行首先关注zone "himanshu.com"
块,然后提取file ...
行。无论它在zone "hi..."
行之后找到多少行。
答案 1 :(得分:1)
使用awk
:
$ awk '/himanshu.com/ {found=1} /^file/ && found {print $0; exit}' file
file "for1";
此命令在看到found
时设置一个名为himanshu.com
的标志,如果已设置标志,则打印出file
。
使用sed
的另一种方式:
$ sed -n '/himanshu/,/}/{/^file/s/.*\"\(.*\)\".*$/\1/p}' file
for1
此命令首先获取himanshu
和下一个}
(包括)之间的所有行,然后在该块中搜索file
,最后使用正则表达式提取{的名称{1}}。
答案 2 :(得分:0)
试试这个awk命令,
$ awk '/zone "himanshu.com"/ {getline; getline; print;}' file
file "for1";
OR
运行以下命令以获取确切的文件名
$ awk '/zone "himanshu.com"/ {getline; getline; print $2}' file
"for1";
$ awk '/zone "himanshu.com"/ {getline; getline; gsub (/";/,"",$2); gsub (/^"/,"",$2); print $2}' file
for1
答案 3 :(得分:0)
awk变种:
awk -F\" '$1~/zone/ && $2==s, /}/ {if($1~/file/) print $2}' s=himanshu.com file