使用awk从给定文件中提取字符串。

时间:2014-06-05 13:50:29

标签: linux shell awk grep

我有一个文件 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";
};

4 个答案:

答案 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