Shell 批量搜索关键词并保存结果到文件中(数组、循环)

时间:2023-09-11 13:35:26
#!/bin/bash

keywords=("不需要" "不用谢谢" "xxx" "xxx")

for var in ${keywords[@]}
do
echo $var
cat ../corpus.txt | grep $var | wc -l
cat ../corpus.txt | grep $var > search_res/$var.txt
done

1.Shell 数组
数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小(与 PHP 类似)。

与大部分编程语言类似,数组元素的下标由0开始。

Shell 数组用括号来表示,元素用"空格"符号分割开,语法格式如下:

array_name=(value1 ... valuen)

我们也可以使用下标来定义数组:

array_name[]=value0
array_name[]=value1
array_name[]=value2

读取数组元素值的一般格式是: ${array_name[index]}

获取数组中的所有元素
使用@ 或 * 可以获取数组中的所有元素,例如:

echo "数组的元素为: ${my_array[*]}"
echo "数组的元素为: ${my_array[@]}"

获取数组长度的方法与获取字符串长度的方法相同,例如:

echo "数组元素个数为: ${#my_array[*]}"
echo "数组元素个数为: ${#my_array[@]}"

2.Shell 流程控制中的for 循环

与其他编程语言类似,Shell支持for循环。

for循环一般格式为:

for var in item1 item2 ... itemN
do
command1
command2
...
commandN
done

写成一行:

for var in item1 item2 ... itemN; do command1; command2… done;

当变量值在列表里,for循环即执行一次所有命令,使用变量名获取列表中的当前取值。命令可为任何有效的shell命令和语句。in列表可以包含替换、字符串和文件名。

in列表是可选的,如果不用它,for循环使用命令行的位置参数。

例如,顺序输出当前列表中的数字:

for loop in
do
echo "The value is: $loop"
done

输出结果:

The value is:
The value is:
The value is:
The value is:
The value is:

顺序输出字符串中的字符:

for str in 'This is a string'
do
echo $str
done

输出结果:

This is a string

参考:

Shell 数组 | 菜鸟教程

Shell 流程控制 | 菜鸟教程