Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何编写shell脚本从文本文件中的key:value对中获取值?_Shell - Fatal编程技术网

如何编写shell脚本从文本文件中的key:value对中获取值?

如何编写shell脚本从文本文件中的key:value对中获取值?,shell,Shell,例如,我有一个文本文件 server_ip: 1.1.1.1 server_port: 123 如何编写一个linux shell脚本,根据服务器ip密钥为我提供值 示例文件 [LOGGER] server_ip: 1.1.1.1 server_port:123 #many such blocks as shown above 原问题的答案 使用awk: 这将选择以server\u ip开头的任何行,并在该行上打印第二个字段 使用sed: 这将尝试从行中删除服务器\u ip:,并仅打印替换成

例如,我有一个文本文件

server_ip: 1.1.1.1
server_port: 123
如何编写一个linux shell脚本,根据服务器ip密钥为我提供值

示例文件

[LOGGER]
server_ip: 1.1.1.1
server_port:123
#many such blocks as shown above
原问题的答案 使用awk: 这将选择以
server\u ip
开头的任何行,并在该行上打印第二个字段

使用sed: 这将尝试从行中删除
服务器\u ip:
,并仅打印替换成功的行的输出

使用
grep-P
(需要GNU grep): 使用awk:

$ awk '/LOGGER/,/^server_ip/{if (/^server_ip/) print $2}' file
1.1.1.1
使用sed:

$ sed -n '/LOGGER/,/^server_ip/{s/server_ip: //p}' file
1.1.1.1
将输出赋值给变量 可以使用类似于
$(…)
的命令替换将屏幕上stdout上显示的输出捕获到变量中。因此:

ip="$(awk '/^server_ip/ {print $2}' file)"
或:

或:

ip=“$(grep-oP”)(?原始问题的答案
使用awk:
这将选择以
server\u ip
开头的任何行,并在该行上打印第二个字段

使用sed: 这将尝试从行中删除
服务器\u ip:
,并仅打印替换成功的行的输出

使用
grep-P
(需要GNU grep): 使用awk:

$ awk '/LOGGER/,/^server_ip/{if (/^server_ip/) print $2}' file
1.1.1.1
使用sed:

$ sed -n '/LOGGER/,/^server_ip/{s/server_ip: //p}' file
1.1.1.1
将输出赋值给变量 屏幕上标准输出上显示的输出可以使用类似于
$(…)
的命令替换捕获为变量。因此:

ip="$(awk '/^server_ip/ {print $2}' file)"
或:

或:


ip=“$(grep-oP”)(?您的问题不是非常清楚。如果您正在寻找基于ip的端口,您可能会使用一个小脚本。
输入

$ cat file
[GOG]
server_ip: 2.2.2.2
server_port: 123
[LOGGER]
server_ip: 1.1.1.1
server_port: 123
[FOG]
server_ip: 3.3.3.3
server_port: 123
#!/bin/bash
if [ -z "$1" ]
then
echo "Usage : command server_name"
exit 1
fi
sed -n "/$1/{n;N;p;q}" file
脚本

$ cat file
[GOG]
server_ip: 2.2.2.2
server_port: 123
[LOGGER]
server_ip: 1.1.1.1
server_port: 123
[FOG]
server_ip: 3.3.3.3
server_port: 123
#!/bin/bash
if [ -z "$1" ]
then
echo "Usage : command server_name"
exit 1
fi
sed -n "/$1/{n;N;p;q}" file
跑步时

$ ./script LOGGER
server_ip: 1.1.1.1
server_port: 123

你的问题不是很清楚。如果你在寻找基于ip的端口,你会使用一个小脚本。 输入

$ cat file
[GOG]
server_ip: 2.2.2.2
server_port: 123
[LOGGER]
server_ip: 1.1.1.1
server_port: 123
[FOG]
server_ip: 3.3.3.3
server_port: 123
#!/bin/bash
if [ -z "$1" ]
then
echo "Usage : command server_name"
exit 1
fi
sed -n "/$1/{n;N;p;q}" file
脚本

$ cat file
[GOG]
server_ip: 2.2.2.2
server_port: 123
[LOGGER]
server_ip: 1.1.1.1
server_port: 123
[FOG]
server_ip: 3.3.3.3
server_port: 123
#!/bin/bash
if [ -z "$1" ]
then
echo "Usage : command server_name"
exit 1
fi
sed -n "/$1/{n;N;p;q}" file
跑步时

$ ./script LOGGER
server_ip: 1.1.1.1
server_port: 123

谢谢。我不想提及文件格式如下:谢谢。这在选择所需值方面非常有效,但我无法将其分配给脚本中的变量进行进一步处理……解决方法是什么?@saee分配给变量是通过命令替换完成的。我用几个命令更新了答案示例。谢谢。我不想提及文件格式如下:谢谢。这在选择所需值方面非常有效,但我无法将其分配给脚本中的变量进行进一步处理……解决方法是什么?@saee分配给变量是通过命令替换完成的。我用几个例子。[记录器]服务器ip:1.1.1服务器端口:123这是文件内容。非常感谢。文件中有各种这样的块。我的脚本需要首先查找记录器,然后选择与服务器端口键关联的ip地址,需要进行哪些修改,请?。对于没有完整说明查询,我深表歉意。
是什么您在寻找?谢谢。我想分配一个变量以进行进一步处理。看起来我能够在var=$(..)中包含awk语句。这似乎有效。需要进一步尝试。[记录器]服务器ip:1.1.1服务器端口:123这是文件内容。非常感谢。文件中有各种这样的块。我的脚本需要首先查找记录器,然后选择与服务器端口键关联的ip地址,需要进行哪些修改,请?。对于没有完整说明查询,我深表歉意。
是什么你在找吗?谢谢。我想分配一个变量以便进一步处理。看起来我可以在var=$(..)中包含awk语句。这似乎有效。需要进一步尝试。@mona_sax抱歉,我不太明白op的意思。请查看更新。@mona_sax抱歉,我不太明白op的意思。请查看更新。