要在windows上运行linux指令,可以通过安装cygwin,具体参考下面链接
https://blog.csdn.net/u010356768/article/details/90756742
面试题:
如何查找特定的文件
使用 find 命令
find语法
find path -option [ -print ] [ -exec -ok command ] {} ;
一般实例
将当前目录及其子目录下所有文件后缀为 .c 的文件列出来:
# find . -name "*.c"
将当前目录及其子目录中的所有文件列出:
# find . -type f
将当前目录及其子目录下所有最近 20 天内更新过的文件列出:
# find . -ctime -20
查找 /var/log 目录中更改时间在 7 日以前的普通文件,并在删除之前询问它们:
# find /var/log -type f -mtime +7 -ok rm {} \;
查找当前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件:
# find . -type f -perm 644 -exec ls -l {} \;
查找系统中所有文件长度为 0 的普通文件,并列出它们的完整路径:
# find / -type f -size 0 -exec ls -l {} \;
面试里常用的方式
精确查找文件
find ~ -name "target3.java"
模糊查找文件
find ~ -name "target*"
不区分文件名大小写去查找文件
find ~ -iname "target*"
检索文件内容
grep
grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。**若不指定任何文件名称,或是所给予的文件名为 -,**则 grep 指令会从标准输入设备读取数据。
语法:grep [options] pattern file
从文件内容查找匹配指定字符串的行:
**$ grep "被查找的字符串" 文件名**
例子:在当前目录里第一级文件夹中寻找包含指定字符串的 .in 文件
**grep "thermcontact" /.in**
从文件内容查找与正则表达式匹配的行:
**$ grep –e "正则表达式" 文件名**
查找时不区分大小写:
**$ grep –i "被查找的字符串" 文件名**
查找匹配的行数:
**$ grep -c "被查找的字符串" 文件名**
从文件内容查找不匹配指定字符串的行:
**$ grep –v "被查找的字符串" 文件名**
管道操作符 |
可将指令链接起来,前一个指令的输出作为后一个指令的输入
使用管道注意的要点
- 只处理前一个命令正确输出,不处理错误输出
- 右边命令必须能够接受标准输入流,否则传递过程中数据会被抛弃
- sed, awk, grep, cut, head, more, split等
例子:
例如:ps aux | grep “test” 在 ps aux中的結果中查找test。
例如:find . -name “*.txt” | xargs grep “good” -n --color=auto 把find的结果当成参数传入到grep中,即在那些文件内部查找good关键字。
常用指令
查找包含某个字段的文件
grep ‘partial\[true\]’ bsc-plat-al-data.info.log
查找正则表达式
grep -o ‘engine\[[0-9a-z]*\]’
过滤掉包含相关字符串的内容
grep -v ‘grep’
对文件内容做统计
awk
awk 是一种处理文本文件的语言,是一个强大的文本分析工具。
语法:
awk [option] ‘cmd’ file
一次读取一行文本,按输入分隔符进行切片,切成多个组成部分
将切片直接保存在内建的变量中,$1, $2… ($0表示行的全部)
支持对单个切片的判断,支持循环判断,默认分隔符为空格
基本用法
log.txt文本内容如下:
2 this is a test
3 Are you like awk
This’s a test
10 There are orange,apple,mongo
用法一:
awk ‘{[pattern] action}’ {filenames} # 行匹配语句 awk ‘’ 只能用单引号
实例:
# 每行按空格或TAB分割,输出文本中的1、4项
$ awk '{print $1,$4}' log.txt
---------------------------------------------
2 a
3 like
This's
10 orange,apple,mongo
# 格式化输出
$ awk '{printf "%-8s %-10s\n",$1,$4}' log.txt
---------------------------------------------
2 a
3 like
This's
10 orange,apple,mongo
用法二:
awk -F #-F相当于内置变量FS, 指定分割字符
实例:
# 使用","分割
$ awk -F, '{print $1,$2}' log.txt
---------------------------------------------
2 this is a test
3 Are you like awk
This's a test
10 There are orange apple
# 或者使用内建变量
$ awk 'BEGIN{FS=","} {print $1,$2}' log.txt
---------------------------------------------
2 this is a test
3 Are you like awk
This's a test
10 There are orange apple
# 使用多个分隔符.先使用空格分割,然后对分割结果再使用","分割
$ awk -F '[ ,]' '{print $1,$2,$5}' log.txt
---------------------------------------------
2 this test
3 Are awk
This's a
10 There apple
用法三:
awk -v # 设置变量
实例:
$ awk -va=1 '{print $1,$1+a}' log.txt
---------------------------------------------
2 3
3 4
This's 1
10 11
$ awk -va=1 -vb=s '{print $1,$1+a,$1b}' log.txt
---------------------------------------------
2 3 2s
3 4 3s
This's 1 This'ss
10 11 10s
用法四:
awk -f {awk脚本} {文件名}
实例:
$ awk -f cal.awk log.txt
批量替换文本内容
sed
语法:sed [option] ‘sed command’ filename
适合对文本的行内容进行处理
sed 可依照脚本的指令来处理、编辑文本文件。
Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。
面试中常用的方式
sed -i ‘s/^Str/String/’ replace.java
sed -i’s/.$/;/’ replace.java
sed -i ‘s/Jack/me/g’ replace.java