我无法弄清楚这一点。我需要查看文件中的每一行并检查它是否与变量中给出的单词匹配。
我从 command 开始read
,但我不知道之后应该使用什么。我尝试过grep
,但我可能用错了。
while read line; do
if [ $condition ] ;then echo "ok" fi
done < file.txt
答案1
这是给您的快速介绍,我们正在做的就是
第 1 行:将文件读入变量时line
第 2 行:匹配正则表达式,$line
如果匹配单词“bird”则回显该行。在此 if 语句中执行您需要的任何操作。
第 3 行:while 循环结束,在文件中进行管道传输foo.text
#!/bin/bash
while read line; do
if [[ $line =~ bird ]] ; then echo $line; fi
done <foo.text
请注意,“bird”是一个正则表达式。这样您就可以将其替换为例如:bird.*word
将同一行与正则表达式匹配。
尝试使用这样的文件,调用foo.text
内容:
my dog is brown
her cat is white
the bird is the word
答案2
更简单的方法是使用grep
(或egrep
)。
grep bird file.txt
答案3
这是一个简单的脚本,它传递两个参数(文件名和变量)...下面还有一个硬编码版本。
#!/bin/bash
[ $# -lt 2 ] && echo "wrong number of args" && exit 1
file=$1
var=$2
while read line; do
if echo "$line" | grep -q "$var"; then echo "ok"; fi
done < "$file"
exit 0
[user@myserver ~]$ myscript file.txt some_text
或者,如果您更喜欢对文件(和变量)进行硬编码而不是作为参数传递......
while read line; do
if echo "$line" | grep -q "some_text"; then echo "ok"; fi
done < file.txt
答案4
sed
另一种选择取决于您要对每行执行的处理。sed
不过,如果您已经打算在每一行上使用,我只会推荐它。
sed -n '/regex/p' foo.text
我正在使用 sed 的-n
选项来抑制正常输出。我使用该p
命令仅打印匹配的行。
您也可以将其与编辑命令结合起来(我指的是处理)。
sed -n '/regex/{s/pattern/replacement/;p}' foo.text
如果您不想对每一行进行任何处理,那么我同意史蒂维猫的回答这grep
是最好的解决方案,是最干净、最快的。
grep regex foo.text
如果您想要进行需要额外 Unix 命令的处理,那么(并且只有这样)我才建议使用read
.