-
alias cmd1 = ‘cmd2’
在shell下键入cmd1指令时,相当于输入、执行cmd2指令。
若只是在shell下执行alias指令,cmd1与cmd2的等价效果只是暂时的;若需要此效果长期有效,可在 /etc/bashrc 中添加 alias cmd1 = ‘cmd2’。如此长期有效。
我的是在 /etc/skel/.bashrc设置的:skel/.bashrc:82: alias grep=‘grep --color=auto’
额外添加的选项的含义是高亮显示关键字 -
grep 行搜索指令
-
关于 -n 选项,主要就是和行号相关。
如
cat -n相比于cat的区别就是多打印了行号
grep -n相比于grep区别就是在搜索到匹配行的同时把匹配行的行号也打印出来
jl@jl-virtual-machine:~/test$
jl@jl-virtual-machine:~/test$ cat model
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(int argc, char** argv) {
return 0;
}
jl@jl-virtual-machine:~/test$
jl@jl-virtual-machine:~/test$
jl@jl-virtual-machine:~/test$ cat model -n
1 #include<stdio.h>
2 #include<stdlib.h>
3 #include<string.h>
4
5 int main(int argc, char** argv) {
6 return 0;
7 }
jl@jl-virtual-machine:~/test$
jl@jl-virtual-machine:~/test$
jl@jl-virtual-machine:~/test$ grep main model
int main(int argc, char** argv) {
jl@jl-virtual-machine:~/test$
jl@jl-virtual-machine:~/test$ grep main model -n
5:int main(int argc, char** argv) {
jl@jl-virtual-machine:~/test$
- grep ‘^行首词’ filename [-n]
搜索filename文件中以(行首词)开头的行,^表示以什么作为开头的行,可选额外打印匹配行的行号
jl@jl-virtual-machine:~/test$
jl@jl-virtual-machine:~/test$ cat model
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(int argc, char** argv) {
return 0;
}
jl@jl-virtual-machine:~/test$
jl@jl-virtual-machine:~/test$
jl@jl-virtual-machine:~/test$
jl@jl-virtual-machine:~/test$
jl@jl-virtual-machine:~/test$ grep '^#include' -n model
1:#include<stdio.h>
2:#include<stdlib.h>
3:#include<string.h>
jl@jl-virtual-machine:~/test$
- grep ‘行尾词$’ filename [-n]
搜索filename文件中以(行尾词)结束的行,$表示以什么作为结尾的行,可选额外打印匹配的行的行号
jl@jl-virtual-machine:~/test$ cat model
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(int argc, char** argv) {
return 0;
}
jl@jl-virtual-machine:~/test$
jl@jl-virtual-machine:~/test$
jl@jl-virtual-machine:~/test$ grep '0;$' -n model
6: return 0;
jl@jl-virtual-machine:~/test$ grep '0;$' model
return 0;
jl@jl-virtual-machine:~/test$
- grep 筛选出符合搜索条件的行
grep -v 筛选出不符合搜索条件的行,相当于反向搜索
jl@jl-virtual-machine:~/test$ cat model
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(int argc, char** argv) {
return 0;
}
jl@jl-virtual-machine:~/test$
jl@jl-virtual-machine:~/test$
jl@jl-virtual-machine:~/test$ grep 'include' -v model
int main(int argc, char** argv) {
return 0;
}
jl@jl-virtual-machine:~/test$
- -B cnt 附加显示匹配行的前cnt行
-A cnt 附加显示匹配行的后cnt行
-C cnt 附加显示匹配行的前后cnt行
注意cnt不包含匹配行本身
jl@jl-virtual-machine:~/test$
jl@jl-virtual-machine:~/test$ cat model
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(int argc, char** argv) {
return 0;
}
jl@jl-virtual-machine:~/test$
jl@jl-virtual-machine:~/test$ grep -B2 '^int' model
#include<string.h>
int main(int argc, char** argv) {
jl@jl-virtual-machine:~/test$
jl@jl-virtual-machine:~/test$ grep -A2 '^int' model
int main(int argc, char** argv) {
return 0;
}
jl@jl-virtual-machine:~/test$
jl@jl-virtual-machine:~/test$ grep -C2 '^int' model
#include<string.h>
int main(int argc, char** argv) {
return 0;
}
jl@jl-virtual-machine:~/test$
-
-w按照单词搜索
采用此选项单词内的关键字所在行不会匹配 -
-o纸打印关键字本身,不打印所在行的其它内容
jl@jl-virtual-machine:~/test$
jl@jl-virtual-machine:~/test$ cat model
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(int argc, char** argv) {
return 0;
}
jl@jl-virtual-machine:~/test$ grep 'include' -o model
include
include
include
jl@jl-virtual-machine:~/test$
-
-r逐层遍历目录搜索关键字
采用此选项就不需要指定 filename了 -
-l 只打印存在关键字的文件名
通常与 -r选项连用 -
-L 与-l相反,打印不匹配的文件名
grep -v ‘^$’ filename 过滤filename中的空行。
layne@ubuntu:~/test$ cat 1.txt
666
888
8888
layne@ubuntu:~/test$
layne@ubuntu:~/test$
layne@ubuntu:~/test$ grep -v '^$' 1.txt
666
888
8888
layne@ubuntu:~/test$
grep可以多次使用,右边的grep可以在左边的grep的基础上进行行过滤
grep … | grep …
layne@ubuntu:~/test$ cat 1.txt
666
6667
6664537
88
8
84324234
layne@ubuntu:~/test$ grep '^6' 1.txt | grep '7$'
6667
6664537
layne@ubuntu:~/test$
管道可以有多个连用,如 cmd1 | cmd2 | cmd3
layne@ubuntu:~/test$ cat 1.txt
666
6667
6664537
88
8
84324234
layne@ubuntu:~/test$ grep '^6' 1.txt | grep '7$'
6667
6664537
layne@ubuntu:~/test$
layne@ubuntu:~/test$ grep '^6' 1.txt | grep '7$' | tee 2.txt
6667
6664537
layne@ubuntu:~/test$ cat 2.txt
6667
6664537
layne@ubuntu:~/test$
本文介绍了如何在Shell下设置命令别名,使得cmd1等同于cmd2,并探讨了别名在.bashrc文件中的持久化设置。接着详细讲解了grep命令的使用,包括-n选项显示行号,^-开始和$结尾的行匹配,以及-w单词匹配,-o打印关键字本身,-B、-A、-C显示上下文行,-r递归搜索,-l列出包含关键字的文件,-L列出不包含关键字的文件。还展示了如何通过管道符结合多个grep进行过滤操作,以及如何过滤空行。
1123

被折叠的 条评论
为什么被折叠?



