我有以下sed命令。我需要在单行
中执行以下命令cat File | sed -n '
/NetworkName/ {
N
/\n.*ims3/ p
}' | sed -n 1p | awk -F"=" '{print $2}'
我需要用单行执行上面的命令。任何人都可以请帮助。
假设文件的内容是
System.DomainName=shayam
System.Addresses=Fr6
System.Trusted=Yes
System.Infrastructure=No
System.NetworkName=AS
System.DomainName=ims5.com
System.DomainName=Ram
System.Addresses=Fr9
System.Trusted=Yes
System.Infrastructure=No
System.NetworkName=Peer
System.DomainName=ims7.com
System.DomainName=mani
System.Addresses=Hello
System.Trusted=Yes
System.Infrastructure=No
System.NetworkName=Peer
System.DomainName=ims3.com
执行命令后,您将只获得peer作为输出。有人可以帮帮我吗?
答案 0 :(得分:1)
将该代码放在单独的.sh
文件中,并将其作为单行命令运行。
答案 1 :(得分:1)
您可以使用单个nawk命令。而你可以失去无用的猫
nawk -F"=" '/NetworkName/{n=$2;getline;if($2~/ims3/){print n} }' file
您可以使用sed以及其他人提出的建议,但我更喜欢正则表达式并且不那么杂乱。 以上将网络名称的值保存为“n”。然后,获取下一行并针对“ims3”检查第二个字段。如果匹配,则打印“n”的值。
答案 2 :(得分:0)
因此,您需要以下行中的域名包含“ims3”的网络名称,而不是下一行包含“ims7”的网络名称(即使示例中的网络名称相同)。 / p>
sed -n '/NetworkName/{N;/ims3/{s/.*NetworkName=\(.*\)\n.*/\1/p;};}' File
这也避免了猫科动物的滥用(更不用说减少执行的命令数量)。
在MacOS X 10.6.4上测试过,但没有理由认为它在其他地方也不起作用。
然而,经验证据显示Solaris sed
与MacOS sed
不同。它可以在一个sed
命令中完成,但它需要三行:
sed -n '/NetworkName/{N
/ims3/{s/.*NetworkName=\(.*\)\n.*/\1/p;}
}' File
在Solaris 10上测试。
答案 3 :(得分:0)
cat File | sed -n '/NetworkName/ { N; /\n.*ims3/ p }' | sed -n 1p | awk -F"=" '{print $2}'
答案 4 :(得分:0)
假设您想要域 ims3 的网络名称,此命令行无法使用 sed :
grep -B 1 ims3 File | head -n 1 | awk -F"=" '{print $2}'
答案 5 :(得分:0)
你只需要将-e
几乎放在你在换行符处打破命令的任何地方或者用分号。您无需额外拨打sed
或awk
或cat
。
sed -n -e '/NetworkName/ {' -e 'N' -e '/\n.*ims3/ s/[^\n]*=\(.*\).*/\1/P' -e '}' File