0 grep shell-script text-processing
我有一个名为student的设置文件
grade1 class1 11 student
grade1 class1 12 student
grade2 class1 21 student
grade2 class2 22 student
......
Run Code Online (Sandbox Code Playgroud)
现在我创建一个test.sh文件来读取学生。如果输入 Gradename 和 studentnumber ,包含两个字符串的行将被复制到student_copy。代码将如下所示:
echo Input gradename and studentnumber
read gradename
read studentnumber
if (input gradename and studnetnumber);
then
echo "the line include them" >> student_copy
Run Code Online (Sandbox Code Playgroud)
例如:
if (input grade1 and 11);
then
echo grade1 class1 11 student >> student_copy
Run Code Online (Sandbox Code Playgroud)
grep
不进行逻辑AND运算(例如match patternA AND patternB
),最接近的是构造一个更长的正则表达式来匹配任何一种可能的变体(例如grep -E 'patternA.*patternB|patternB.*patternA'
)。如果您有很多要匹配的模式,这将变得非常笨拙和笨拙。
做你想做的最简单的方法是使用脚本语言,如awk
或perl
代替grep
.
例如,以下awk
单行将匹配出现两种模式的任何行。
awk '/patternA/ && /patternB/'
Run Code Online (Sandbox Code Playgroud)
任何模式匹配也可以反转,例如,如果您想匹配任何包含不包含模式 B 的模式 A 的行(即AND NOT操作):
awk '/patternA/ && ! /patternB/'
Run Code Online (Sandbox Code Playgroud)
注意:一种简单的方法是使用grep patternA | grep patternB
(or grep patternA | grep -v patternB
) - 这确实实现了逻辑 AND(或 AND NOT),但代价是运行多个grep
命令而不是单个awk
orperl
命令。
归档时间: |
|
查看次数: |
83 次 |
最近记录: |