Linux脚本练习之script090-提取值
script090
题目
假设我们的日志 nowcoder.txt 里,内容如下
12-May-2017 10:02:22.789 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Server version:Apache Tomcat/8.5.15 12-May-2017 10:02:22.813 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Server built:May 5 2017 11:03:04 UTC 12-May-2017 10:02:22.813 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Server number:8.5.15.0 12-May-2017 10:02:22.814 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name:Windows, OS Version:10 12-May-2017 10:02:22.814 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture:x86_64
现在需要你提取出对应的值,输出内容如下:
serverVersion:Apache Tomcat/8.5.15 serverName:8.5.15.0 osName:Windows osVersion:10
脚本一
使用 grep 匹配符合指定正则表达式的行,然后使用 sed 命令删除多余的字符串,则剩下的就是我们需要的结果。
#!/bin/bash
server_version=$(grep "Server version:" nowcoder.txt | sed s/.*Server version://)
server_name=$(grep "Server number:" nowcoder.txt | sed s/.*Server number://)
os_name=$(grep "OS Name:" nowcoder.txt | sed s/.*OS Name:// | sed s/,.*//)
os_version=$(grep "OS Version:" nowcoder.txt | sed s/.*OS Version://)
echo "serverVersion:${server_version}"
echo "serverName:${server_name}"
echo "osName:${os_name}"
echo "osVersion:${os_version}"
脚本二
使用 awk 命令编程实现。
# 通过 冒号字符和逗号字符 进行分割
awk -F "[:,]" {
# 如果该行包含字符串 Server version,则提取第四个字段输出
if($0~"Server version"){
print "serverVersion:" $4;
}
# 同理
if($0~"Server number"){
print "serverName:" $4;
}
if($0~"OS Name"){
print "osName:" $4;
}
if($0~"OS Version"){
print "osVersion:" $6
}
} nowcoder.txt
