grep 两个搜索词

grep 两个搜索词

我可以在多个文件中使用以下内容搜索包含两个特定单词的行:

for f in $(ls *.txt); do
  echo ">"$f; more $f | grep word1 | grep word2
done

现在,我想编写一个 shell 脚本来完成此任务,这样我就不必一次又一次地重新输入整个内容。我还想添加一个在搜索中使用一个单词或两个单词的选项。我将在命令行将这些搜索到的单词传递给 shell 脚本。我编写了以下 shell 脚本 searchwords.sh:

word1=$1
word2=$2
for f in $(ls *.txt); do
echo ">"$f
###if word2 is empty; then execute 
if [-z $word2]; then
        more $f | grep $word1
else
###if word2 is not empty
        more $f | grep $word1 | grep $word2
fi
done

用法:

sh searchwords.sh word1 word2

虽然我得到了我想要的,但我也得到了错误输出

[-z: not found

我知道我的代码不正确,但我无法放置它。

答案1

您的脚本中有一些错误:

  • 中缺少空间[-z $word2]
  • 变量中缺少双引号
  • 无用的使用more | grep
  • 的解析输出ls已损坏
  • grep$word1如果或$word2以破折号开头将会失败-

这是一个修复:

word1=$1
word2=$2

for f in ./*.txt; do
  printf '>%s\n' "$f"

  ###if word2 is empty; then execute 
  if [ -z "$word2" ]; then
    grep -- "$word1" "$f"
  else
  ###if word2 is not empty
    grep -- "$word1" "$f" | grep -- "$word2"
  fi
done

相关内容