我知道 grep 可以用来进行部分搜索,例如如果我使用
echo "Enter example"
read example
echo "Enter Subject"
read subject
grep -i ^$example info.txt | grep -i ^[^,]*:$subject
输出将是包含字符串的所有行,假设我键入“example”,它将显示包含字符串“example”的字符串的所有行。
我需要这个功能,以便用户可以对 info.txt 中的可用阅读材料列表进行一般搜索。
我目前正在使用 if 语句,如果 $example 和 $subject 中都有信息,它将进行特定搜索,例如字面字符串匹配字符串,否则它将返回 false。
有没有办法让搜索更灵活,或者让它具体搜索,就像info.txt中有很多例子一样。
- 例1:基础数学
- 例2:高等数学
- 示例3:如何创建一个好的示例?
因此,如果我输入“示例”和“数学”,它将返回 false。但是,如果我键入“示例 1”和“基础数学”,它将回显输出。我四处询问,我的大多数朋友都推荐我使用 awk,但如果我这样做,我将不得不重做我的整个脚本,因为我在大多数函数中使用 grep 来进行搜索。
我的老师当时只教了我们grep,因此,只了解基本的grep,不了解awk。
答案1
这是 shellhacks.com 上的一个不错的小页面,其中显示了示例“使用 BASH“Grep OR / Grep AND / Grep NOT”运算符“,和它有sed
&awk
等价物。我将其粘贴到此处,您可以使用它们以某种或任何顺序搜索$subject
and/or/not 。$example
使用 BASH“Grep OR / Grep AND / Grep NOT”运算符
在下面的文章中,您将找到几个示例,展示如何在 Linux GREP / SED / AWK 命令中使用 OR / AND / NOT 运算符。
使用这样的任务是很常见的任务Linux 命令行工具作为 grep、sed 和 awk使用正则表达式解析文件。
我将展示如何查找所有行, 那包含任意几种模式,如何打印文件中的所有行,即匹配多个模式以及如何查找并打印所有行不匹配模式。
Grep 'OR' 运算符
查找文件中与以下任意模式匹配的所有行。
使用 GREP 命令:
grep "pattern1\|pattern2" file.txt
grep -E "pattern1|pattern2" file.txt
grep -e pattern1 -e pattern2 file.txt
egrep "pattern1|pattern2" file.txt
使用 AWK 命令:
awk '/pattern1|pattern2/' file.txt
使用 SED 命令:
sed -e '/pattern1/b' -e '/pattern2/b' -e d file.txt
Grep 'AND' 运算符
查找并打印文件中与多个模式匹配的所有行。
使用 GREP 命令:
grep -E 'pattern1.*pattern2' file.txt # in that order
grep -E 'pattern1.*pattern2|pattern2.*pattern1' file.txt # in any order
grep 'pattern1' file.txt | grep 'pattern2' # in any order
使用 AWK 命令:
awk '/pattern1.*pattern2/' file.txt # in that order
awk '/pattern1/ && /pattern2/' file.txt # in any order
使用 SED 命令:
sed '/pattern1.*pattern2/!d' file.txt # in that order
sed '/pattern1/!d; /pattern2/!d' file.txt # in any order
Grep 'NOT' 运算符
查找并打印所有与模式不匹配的行。
使用 GREP 命令:
grep -v 'pattern1' file.txt
使用 AWK 命令:
awk '!/pattern1/' file.txt
使用 SED 命令:
sed -n '/pattern1/!p' file.txt
这是一个链接GNU 的 Grep 手册。它有很多好的信息,包括常用表达还有一些使用示例。
该页面是一个正则表达式上的“备忘单”。