首页 > 解决方案 > 使用 bash 脚本需要获得所需的输出

问题描述

我有一个包含 4,000 行的文件,其中显示了以下一些行:

Sdppointer_u7
Sdppointer_gh6
Wsd_rt5
Wsd_p8

所有行将在哪里Sdppointer_*, Wsd_*。当文件遇到带有字符串的行时,它需要打印如下所示的输出Sdppointer_*, Wsd_*。在下面的代码中 t2 是文件。

#!/bin/bash
str1="SdpMaster*"
str2="Wsd*"
content=$(cat t2)
if [ "$str1" == "$content" ];then 
    echo "User A hitlist  " "$str1" "-rev" "B.9"
elif [ "$str2" == "$content" ];then
    echo "User A hitlist  " "$str2" "-rev" "A.7"
else
    echo "Not found"
fi

在我上面的代码中,我怎样才能让 str1、str2 接受所有的字符串,比如Sdppointer_*, Wsd_*

期望的输出:

User A hitlist Sdppointer_u7 -rev B.9
User A hitlist Sdppointer_gh6 -rev B.9
User A hitlist Wsd_rt5 -rev A.7
User A hitlist Wsd_p8 -rev A.7

标签: bash

解决方案


我喜欢这种事情的案例陈述。

while read line
do case "$line" in
   SdpMaster*) echo "User A hitlist  " "SdpMaster*" "-rev" "B.9" ;;
         Wsd*) echo "User A hitlist  " "Wsd*"       "-rev" "A.7" ;;
            *) echo "Not found '$line'"                          ;;
   esac
done < tst

我添加了与 SdpMaster 匹配的行 (3) -

$: cat tst
Sdppointer_u7
Sdppointer_gh6
SdpMaster_ab1
Wsd_rt5
Wsd_p8

输出 -

Not found 'Sdppointer_u7'
Not found 'Sdppointer_gh6'
User A hitlist   SdpMaster* -rev B.9
User A hitlist   Wsd* -rev A.7
User A hitlist   Wsd* -rev A.7

如果你愿意,你仍然可以使用 vars。


推荐阅读