bash - 读取行并比较字符串

标签 bash

尝试创建一个 bash 脚本来逐行读取文件(参数 1)。仅当脚本包含与搜索字符串之一匹配的关键字时,脚本才会回显该行。到目前为止我所拥有的是:

#!/bin/bash
searchString1="TASK"
searchString2="WD's"

while read line
do
    name=$line
    if [[ $searchString1 == *"$name"* ]] ; 
    then
        echo $name;
    elif [[ $searchString2 == *"$name"* ]] ; 
    then
        echo $name;
    fi 
done < $1

脚本运行方式:

chmod +x parser_script.sh
./parser_script.sh filename.txt    

此 bash 脚本未检测搜索字符串。 知道如何解决这个问题吗?谢谢

最佳答案

测试是向后的。

if [[ $name == *"$searchString1"* ]]; then
    echo $name
elif [[ $name == *"$searchString2"* ]]; then
    echo $name
fi 

其他写法:

if [[ $name == *"$searchString1"* ]] ||
   [[ $name == *"$searchString2"* ]]
then
    echo $name;
fi 

case $name in
    *"$searchString1"*|*"$searchString2"*)
        echo $name
        ;;
esac

正如评论中提到的,您可以通过单个 grepawk 调用来完成此操作。

关于bash - 读取行并比较字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28564128/

相关文章:

bash - `extension="${filename##*. }"` 在 bash 中工作吗?

python - 如何从 Unicode 文件中删除字母数字单词

bash - 使用管道获取进程替换的退出代码进入 while 循环

linux - 如何将 ssh 的输出发送到/dev/null

linux - 如何从 bash 脚本确定 gcc 的配置?

java进程构建器添加路径到环境不起作用

php - SQL从脏数据集创建新数据库

arrays - 对读入数组的元素进行排序

bash - 命令替换中的变量赋值

linux - 将 stderr 直接输出到 stdout $ command-name 2>&1 默认情况下,stderr 不会打印到终端吗?