Linux脚本练习之script090-提取值

Posted 二木成林

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux脚本练习之script090-提取值相关的知识,希望对你有一定的参考价值。

script090

题目

注:本题来源于 SHELL33 业务分析-提取值

假设我们的日志 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

以上是关于Linux脚本练习之script090-提取值的主要内容,如果未能解决你的问题,请参考以下文章

Linux脚本练习之script034-取出网卡 IP 地址。

Linux脚本练习之script005-从键盘读入 10 个数,显示最大值和最小值。

Linux脚本练习之script013-判断当前用户对指定参数文件,是否不可读并且不可写。

Linux脚本练习之script014-判断参数文件是否为 `.sh` 后缀的普通文件,如果是,则添加所有人可执行权限,否则提示非脚本文件。

Linux脚本练习之script008-将个人用户下任意目录下所有文件的扩展名改为 `.bak`。

Linux脚本练习之script037-打印无密码用户。