我想在只知道几个字符的文件中搜索某些内容

我想在只知道几个字符的文件中搜索某些内容

我有个问题。我正在编写一个脚本,该脚本将获得一些章程作为参数 $1 。我有文件“drinks.txt”,其中写了几行,如下所示:

Cocacola
juice
CocaPepsi

例如,我将作为参数“co”传递,这应该返回可口可乐和可口可乐。我的 IF 条件失败了。这是我的代码:

searchingParameter=$1
for drink in `cat drinks.txt`;do
   if [ "$drink" == "$1*" ]; then
      echo "$drink"
   fi
done

因此,这应该打印出每一种含有 1 美元加 * 的饮料。为此执行 IF 的正确方法是什么?

提前致谢。

答案1

使用 shell 循环执行此操作很尴尬且容易出错。例如,如果您的drinks.txt文件包含一个*单独的行(或由空格包围),它将扩展到当前目录中的文件的名称。

相反,只需使用grep

grep -iF 'co' drinks.txt

在这里,我们使用grepwith-i进行不区分大小写的匹配。该-F选项意味着grep应该使用该模式作为细绳而不是作为正则表达式(这在这里并不重要,但是如果您的模式包含类似*or.或其他特殊正则表达式符号的字符,则很重要)。

该命令将返回包含字符串coCocO的每个完整行CO

作为脚本的一部分:

#!/bin/sh

grep -iF -e "$1" drinks.txt

-e在这里用的是“下一个参数是一个模式”。如果我不这样做并$1以破折号开头,它将被视为 的一个选项grep

要在单词开头强制匹配,您可以使用

grep -i -e '\b'"$1" drinks.txt

或者

grep -i -e '\<'"$1" drinks.txt

其中\b\<两者将在单词边界处匹配。请注意,我们必须删除-F此处的选项,因为我们的模式现在是正则表达式。这也意味着 中的任何正则表达式字符都$1将是特殊的。

相关内容