我有一个简单的脚本,我从文件中搜索单词
words="you are hogan"
for i in $words; do
if grep -q "$i" text.txt; then
echo "word(s) are exists"
grep "$i" text.txt
else
echo "word(s) are not exists"
fi
done
它有效,我可以逐字逐句地制作grep。我的脚本是一样的:
grep "you" text.txt
grep "are" text.txt
grep "hogan" text.txt
但是,我收到了另一项任务。我想逐字搜索和替换文字。
所以,我应该创建第二个变量,用单词,我应该使用的是来自第一个变量$words
的单词。我怎么理解,我应该在一个循环中使用两个变量。我知道,在这种情况下我可以使用数组。
好吧,让我们这样做,我试图制作grep,就像第一个例子:
words="you are hogan"
words2="wwe wwf nukem"
for ((i=0;i<${#words[@]};++i)); do
if grep -q "${words[i]}" text.txt; then
echo "word(s) are exists"
echo "${words[i]}"
else
echo "word(s) are not exists"
fi
done
结果不好。
+ (( i=0 ))
+ (( i<1 ))
+ grep -q 'you are hogan' text.txt
+ echo 'word(s) are not exists'
word(s) are not exists
你怎么看,它试图制作所有的措辞,而不是每个单词。我怎样才能为每个单词执行grep命令,如第一个例子?
答案 0 :(得分:1)
您的第二种语法是尝试将words
视为一个数组,但它是一个字符串。如果你想让它成为一个数组,你可以用不同的方式初始化它:
words=("you" "are" "hogan")
for word in "${words[@]}"; do
if grep -q "$word" text.txt; then
printf 'Word exists: %s\n' "$word"
else
printf 'Word not found: %s\n' "$word"
fi
done
或者如果您想要索引,请使用您的方法,以便您可以访问其他字段中的相同索引。