如何从sed / awk中的特定行范围中提取某些变量?
示例:我想从.tnsnames.ora中提取主机和端口 从这一部分开始,第105行。
DB_CONNECTION=
(description=
(address=
(protocol=tcp)
(host=127.0.0.1)
(port=1234)
)
(connect_data=
(sid=ABCD)
(sdu=4321)
)
答案 0 :(得分:2)
gawk可以在字段分隔符(FS)中使用正则表达式。
'$ 0 = $ 2'始终为true,因此此脚本会自动打印$ 2。
$ gawk -F'[()]' 'NR>105&&NR<115&&(/host/||/port/)&&$0=$2' .tnsnames.ora
答案 1 :(得分:1)
使用:
sed'105,$&lt;你想要的任何sed代码&gt;'
如果您特别想要主机和端口,您可以执行以下操作:
sed .tnsnames.ora '105,115p'|grep -e 'host=' -e 'port='
答案 2 :(得分:1)
您可以使用地址范围指定应用正则表达式的部分。如果您将结束行地址保留(保留逗号),它将与文件末尾匹配。您还可以多次使用'-e'来“链接”多个表达式。以下表达式只将端口和主机值打印到标准输出。它使用反向引用(\ 1)以便只打印匹配的部分。
sed -n -e '105,115s/(port=\([0-9].*\))/\1/p' -e '105,115s/(host=\([0-9\.].*\))/\1/p' tnsnames.ora
答案 3 :(得分:1)