Bash 读取行并比较字符串
尝试创建一个bash脚本,逐行读取文件(参数1)。脚本仅在包含与其中一个搜索字符串匹配的关键字时才会回显该行。到目前为止,我得到的是: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
#!/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/'文件
@fedorquiWD的
中的撇号需要特殊处理(\''
——在单引号字符串中转义不起作用),或者整个过程需要在双引号中: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