在sed/awk中对线路范围执行操作
如何从sed/awk中的特定行范围中提取特定变量 示例:我想从.tnsnames.ora中删除主机和端口 从本节第105行开始在sed/awk中对线路范围执行操作,sed,awk,Sed,Awk,如何从sed/awk中的特定行范围中提取特定变量 示例:我想从.tnsnames.ora中删除主机和端口 从本节第105行开始 DB_CONNECTION= (description= (address= (protocol=tcp) (host=127.0.0.1) (port=1234) ) (connect_data= (sid=ABCD) (sdu=4321)
DB_CONNECTION=
(description=
(address=
(protocol=tcp)
(host=127.0.0.1)
(port=1234)
)
(connect_data=
(sid=ABCD)
(sdu=4321)
)
使用:
sed'105,$<此处需要的任何sed代码>'
如果您特别需要主机和端口,可以执行以下操作:
sed .tnsnames.ora '105,115p'|grep -e 'host=' -e 'port='
您可以使用地址范围指定将正则表达式应用到哪个节。如果您省略了结束行地址(保留逗号),它将与文件结尾匹配。您还可以多次使用“-e”来“链接”多个表达式。下面的表达式仅将端口和主机值打印为标准输出。它使用反向引用(\1)以便只打印匹配的部分
sed -n -e '105,115s/(port=\([0-9].*\))/\1/p' -e '105,115s/(host=\([0-9\.].*\))/\1/p' tnsnames.ora
gawk可以在字段分隔符(FS)中使用正则表达式 “$0=$2”始终为真,因此此脚本会自动打印$2
$ gawk -F'[()]' 'NR>105&&NR<115&&(/host/||/port/)&&$0=$2' .tnsnames.ora
$gawk-F'[()]''NR>105&&NR@lk,请回答您发布的答案:
您可以像C一样编写awk代码,但它更简洁地表示为“模式{action}”对
如果你有或,字段分隔符是一个广文斋藤说
gawk -F'[()=]' '
NR < 105 {next}
NR > 115 {exit}
$2 == "host" || $2 == "port" {
# do stuff with $2 and $3
print $2 "=" $3
}
'
gawk-F'[()=]
NR<105{next}
NR>115{exit}
$2==“主机”| |$2==“端口”{
#用2美元和3美元做事
打印$2“=”$3
}
'