Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 读取行并比较字符串_Bash - Fatal编程技术网

Bash 读取行并比较字符串

Bash 读取行并比较字符串,bash,Bash,尝试创建一个bash脚本,逐行读取文件(参数1)。脚本仅在包含与其中一个搜索字符串匹配的关键字时才会回显该行。到目前为止,我得到的是: #!/bin/bash searchString1="TASK" searchString2="WD's" while read line do name=$line if [[ $searchString1 == *"$name"* ]] ; then echo $name; elif [[ $searchS

尝试创建一个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
此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

正如在评论中提到的,您可以通过一个
grep
awk
调用来实现这一点。

在一个awk单行程序中实现这一切可能要快得多:
awk'/TASK/| |/WD/'文件
@fedorqui
WD的
中的撇号需要特殊处理(
\''
——在单引号字符串中转义不起作用),或者整个过程需要在双引号中:
awk”/TASK/|WD/“file
。或者
grep“TASK\|WD”文件
。我喜欢
grep
。但是,是的,所有这些似乎都比在普通bash中执行要容易得多。@Etan、@hek2mgl-bash和shebang已更新。没有错误,但仍无法正确检测到搜索字符串。“没有错误”是什么意思?指定bash修复了
[[
那就出问题了?@Wintermute fedorqui,谢谢!不过在bash中如何做到这一点还是不错的:)太好了。谢谢约翰!
if [[ $name == *"$searchString1"* ]] ||
   [[ $name == *"$searchString2"* ]]
then
    echo $name;
fi 

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