luc*_*ton 7 command-line bash scripts
如果我要输入某个命令,它会在终端中给我一个很长的输出。我只需要这个输出的几个字符。我如何在 bash 脚本中仅将终端输出中的某些字符保存为变量?
例如,如果我的脚本是:
#!/bin/bash
ifconfig
Run Code Online (Sandbox Code Playgroud)
我可以使用将整个输出保存为变量
OUTPUT="$(ifconfig)"
Run Code Online (Sandbox Code Playgroud)
但我只想复制我的 IP 地址,这是在 inet [IP ADDRESS]
我该怎么做呢?
编辑:IP 地址仅在此处用作示例,因为出于安全原因,我无法在此处提及该命令,它实际上是其他文本中的“短语:[五位数]”,而我只需要该五位数。抱歉有任何混淆
Joh*_*024 10
grep
ifconfig | grep -oP '(?<=inet addr:)[\d.]+'
Run Code Online (Sandbox Code Playgroud)
这使用 grep 的 Perl 样式的正则表达式来选择字符串后面的 IP 地址inet
。
因此,要将其保存在变量中,只需将两个命令放入$()
:
output=$(ifconfig | grep -oP '(?<=inet addr:)[\d.]+')
Run Code Online (Sandbox Code Playgroud)
以上将保存系统上所有活动接口的 IP 地址。如果您只想保存一个接口的输出,例如eth0
,请使用:
output=$(ifconfig eth0 | grep -oP '(?<=inet addr:)[\d.]+')
Run Code Online (Sandbox Code Playgroud)
awk
ifconfig eth0 | awk -F'[ :]+' '/inet /{print $3}'
Run Code Online (Sandbox Code Playgroud)
/inet /
选择包含inet
. 在这些行上,打印第三个字段,其中字段分隔符是空格或冒号的 y 组合。
sed
ifconfig eth0 | sed -En 's/.*inet addr:([[:digit:].]+).*/\1/p'
Run Code Online (Sandbox Code Playgroud)
ifconfig
还有另一个版本,ifconfig
它产生的输出类似于inet 1.2.3.4
而不是inet addr:1.2.3.4
. 对于该版本,请尝试:
ifconfig | grep -oP '(?<=inet )[\d.]+'
Run Code Online (Sandbox Code Playgroud)
或者:
ifconfig eth0 | awk '/inet /{print $2}'
Run Code Online (Sandbox Code Playgroud)
或者,使用以下任一版本的 sed 命令ifconfig
:
ifconfig eth0 | sed -En 's/.*inet (addr:)?([[:digit:].]+).*/\2/p'
Run Code Online (Sandbox Code Playgroud)
小智 5
ifconfig 将来可能会消失,它在某些 linux 中已被弃用(也许是某些 ubuntu 版本,但请继续阅读)。
iproute2 包中的 ip (应该默认安装)给出
ip addr list
Run Code Online (Sandbox Code Playgroud)
并可以缩写为
ip a
Run Code Online (Sandbox Code Playgroud)
并结合
ip a | grep -o -P '([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}(?=/)'
Run Code Online (Sandbox Code Playgroud)
使用以下 CIDR 掩码斜杠过滤所有 IPv4 相似号码。如果您不介意广播,它甚至可以在 grep 的 -E 模式下工作,只需将 RegEx 的最后一个括号去掉即可。
如果您通常想要剪切 cli 输出,并且想要避免通过 cut 进行管道传输...(就像在本例中获取第一个字段)
IPS=$(ip a | grep -o -E '([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}' | cut -d\ -f1 - )
Run Code Online (Sandbox Code Playgroud)
您可以使用 bash 字符串操作(如下例所示):
echo ${SSH_CONNECTION%% *}
Run Code Online (Sandbox Code Playgroud)
这应该会给您一些从哪里开始以及如何开始的线索。
归档时间: |
|
查看次数: |
7207 次 |
最近记录: |