作者丨五角钱的程序员 图丨pexels
今天继续讲解美团java一面面试题目,Linux怎么搜索文件中的字符串,并把这个字符串所在行和下面一行的内容写到另外一个文件中?多了解Linux操作系统基本的命令,以及运行相关等是程序员的基本功。
搜索文件中的字符串
如果你想在当前目录下 查找"chenyuan"字符串,可以这样:
代码语言:javascript复制[hadoop@hadoop101 opt]$ grep -rn "chenyuan" *
代码语言:javascript复制* : 表示当前目录所有文件,也可以是某个文件名
-r 是递归查找
-n 是显示行号
-R 查找所有文件包含子目录
-i 忽略大小写
下面是一些有意思的命令行参数:
grep -i pattern files :不区分大小写地搜索。默认情况区分大小写,
grep -l pattern files :只列出匹配的文件名,
grep -L pattern files :列出不匹配的文件名,
grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配'magic',而不是'magical'),
grep -C number pattern files :匹配的上下文分别显示[number]行,
grep pattern1 | pattern2 files :显示匹配 pattern1 或 pattern2 的行,
grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。
这里还有些用于搜索的特殊符号:
创建三个文件:
代码语言:javascript复制[hadoop@hadoop101 opt]$ sudo touch xl.txt
[hadoop@hadoop101 opt]$ sudo chown hadoop:hadoop ll.txt
写入:chenyuan
接下来按照相同的办法创建:ll.txt,lll.txt.分别写入:yuanic,yuan。
代码语言:javascript复制< 和 > 分别标注单词的开始与结尾。
例如:
grep yuan* 会匹配 ‘chenyuan’、‘yuanic’、‘yuan’等,
grep '<yuan' * 匹配‘yuanic’和‘yuan’,但不是‘chenyuan’,
grep '<yuan>' 只匹配‘yuan’,而不是‘chenyuan’或‘yuanic’等其他的字符串。
'^':指匹配的字符串在行首,
'$':指匹配的字符串在行尾,
代码语言:javascript复制[hadoop@hadoop101 opt]$ grep -rn yuan *
代码语言:javascript复制[hadoop@hadoop101 opt]$ grep -rn '<yuan' *
代码语言:javascript复制[hadoop@hadoop101 opt]$ grep -rn '<yuan>'
写到另一个文件中
修改xl.txt
代码语言:javascript复制[hadoop@hadoop101 opt]$ vi xl.txt
chenyuan
xl
lala
清空ll.txt
代码语言:javascript复制[hadoop@hadoop101 opt]$ grep -i "chenyuan" -A 1 xl.txt | grep -v -e "--" >ll.txt
[hadoop@hadoop101 opt]$ cat ll.txt
chenyuan
xl
grep 指令用于查找内容bai包du含指定的范本样式的文件,如果zhi发现某文件的内容符合所指定的范本样式,预设grep指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为“-”,则grep指令会从标准输入设备读取数据。
END