使用 bash 仅获取 linux 上的子网掩码
Get only the subnet mask number on linux using bash
我试过了 :
ip -o -f inet addr show | awk '/scope global/ {print }'
但是输出的 IP 地址带有子网掩码:
192.168.1.108/24
我只要号码24
这应该只输出两位或一位数字子网掩码,如 24
:
ip -o -f inet addr show | grep -Po "/\K[[:digit:]]{1,2}(?=.*scope\sglobal)"
如果你想让它输出斜杠 /24
:
ip -o -f inet addr show | grep -Po "/[[:digit:]]{1,2}(?=.*scope\sglobal)"
我在你的命令中使用了正则表达式 select /
之后的所有内容
ip -o -f inet addr show | awk '/scope global/ {print }' | grep -o '[^/]*$'
ip addr show
可以输出 JSON 数据,因此可以可靠地显式解析 jq
:
ip \
-family inet \
-json \
addr show |
jq -r '.[].addr_info[0] | select(.scope == "global") | .prefixlen'
man ip
:
-j
, -json
Output results in JavaScript Object Notation (JSON).
使用 GNU awk
,您可以使用 gensub
:
txt='scope global'
ip -o -f inet addr show | \
awk -v search="$txt" '[=10=] ~ search{print gensub(/.*\//, "", 1, )}'
这里,
-v search="$txt"
- 将 txt
的值作为 search
变量 传递给 awk
[=17=] ~ search
- 检查整行是否匹配
gensub(/.*\//, "", 1, )
- 删除包括第四个字段中最后一个斜杠在内的所有内容(替换为空字符串 (""
),搜索仅执行一次 (1
) ).
我试过了
ip -o -f inet addr show | awk '/scope global/ {print }'
但是输出的 IP 地址带有子网掩码:
192.168.1.108/24
我只要号码24
这应该只输出两位或一位数字子网掩码,如 24
:
ip -o -f inet addr show | grep -Po "/\K[[:digit:]]{1,2}(?=.*scope\sglobal)"
如果你想让它输出斜杠 /24
:
ip -o -f inet addr show | grep -Po "/[[:digit:]]{1,2}(?=.*scope\sglobal)"
我在你的命令中使用了正则表达式 select /
ip -o -f inet addr show | awk '/scope global/ {print }' | grep -o '[^/]*$'
ip addr show
可以输出 JSON 数据,因此可以可靠地显式解析 jq
:
ip \
-family inet \
-json \
addr show |
jq -r '.[].addr_info[0] | select(.scope == "global") | .prefixlen'
man ip
:
-j
,-json
Output results in JavaScript Object Notation (JSON).
使用 GNU awk
,您可以使用 gensub
:
txt='scope global'
ip -o -f inet addr show | \
awk -v search="$txt" '[=10=] ~ search{print gensub(/.*\//, "", 1, )}'
这里,
-v search="$txt"
- 将txt
的值作为search
变量 传递给 [=17=] ~ search
- 检查整行是否匹配gensub(/.*\//, "", 1, )
- 删除包括第四个字段中最后一个斜杠在内的所有内容(替换为空字符串 (""
),搜索仅执行一次 (1
) ).
awk