本文列出的文件操作命令有:
1.创建 2.删除 3.拷贝 4.剪切/移动 5.重命名 6.chmod 7.查看文件命令(more,less,cat,head,tail) 8.grep 9.find 10.vi/vim 11.wc 12.awk 13.sed 14.tar 15.gzip 16.diff 17.sort 18.uniq
1.创建
普通文件:touch filename 目录文件:mkdir filename
2.删除
普通文件: rm filename 目录文件: rmdir dirname (只能删除空目录) rm -r dirname(可递归删除非空目录)
3.拷贝
普通文件:cp path1/filename path2 目录文件: cp -r path1/dir path2
4.剪切/移动
普通文件:mv path1/filename path2 目录文件: mv path1/dir path2
5.重命名
mv path1/name path1/name (注意路径必须相同)
6.chmod修改文件权限命令
chmod u/g/o/a +/-/= r/w/x/rw/rx/wx/rwx filename
u,g,o,a分别表示所有者User、Group组用户、Other其他用户,a表示这三者皆是,对该文件的访问权限权限,是数字,r=4,w=2,x=1,rwx属性则4+2+1=7;若要rw属性则4+2=6;若要r+x属性则4+1=5
+ 表示增加权限、- 表示取消权限、= 表示唯一设定权限
chmod a=rwx file 和 chmod 777 file 效果相同
chmod ug=rwx,o=x file 和 chmod 771 file 效果相同
7.查看文件命令
more:翻页查看(内容很多) --空格(下一页) b(上一页)
less:翻页查看(内容很多) --不仅可以翻页,还可以翻行查看
cat:查看文件全部内容(适合文件内容较少时)
head -行数 文件名:显示开头几行(行数)
tail -行数 文件名:显示最后几行(行数) --适合用来查看log日志文件
8.grep命令
作为linux中最为常用的三大文本(awk,sed,grep)处理工具之一,grep家族总共有三个:grep,egrep,fgrep。
grep命令的常用格式为:grep [选项] ”模式“ [文件]
常用选项:
-E :开启扩展(Extend)的正则表达式。
-i :忽略大小写(ignore case)。
-v :反过来(invert),只打印没有匹配的,而匹配的反而不打印。
-n :显示行号
-w :被匹配的文本只能是单词,而不能是单词中的某一部分,如文本中有liker,而我搜寻的只是like,就可以使用-w选项来避免匹配liker
-c :显示总共有多少行被匹配到了,而不是显示被匹配到的内容,注意如果同时使用-cv选项是显示有多少行没有被匹配到。
-o :只显示被模式匹配到的字符串。
--color :将匹配到的内容以颜色高亮显示。
-A n:显示匹配到的字符串所在的行及其后n行,after
-B n:显示匹配到的字符串所在的行及其前n行,before
-C n:显示匹配到的字符串所在的行及其前后各n行,context
模式部分:
1、直接输入要匹配的字符串,这个可以用fgrep(fast grep)代替来提高查找速度,比如我要匹配一下hello.c文件中printf的个数:fgrep -c "printf" hello.c
2、使用基本正则表达式,下面谈关于基本正则表达式的使用:
匹配字符:
. :任意一个字符。
[abc] :表示匹配一个字符,这个字符必须是abc中的一个。
[a-zA-Z] :表示匹配一个字符,这个字符必须是a-z或A-Z这52个字母中的一个。
[^123] :匹配一个字符,这个字符是除了1、2、3以外的所有字符。
对于一些常用的字符集,系统做了定义:
[A-Za-z] 等价于 [[:alpha:]]
[0-9] 等价于 [[:digit:]]
[A-Za-z0-9] 等价于 [[:alnum:]]
tab,space 等空白字符 [[:space:]]
[A-Z] 等价于 [[:upper:]]
[a-z] 等价于 [[:lower:]]
标点符号 [[:punct:]]
匹配次数:
\{m,n\} :匹配其前面出现的字符至少m次,至多n次。
\? :匹配其前面出现的内容0次或1次,等价于\{0,1\}。
* :匹配其前面出现的内容任意次,等价于\{0,\},所以 ".*" 表述任意字符任意次,即无论什么内容全部匹配。位置锚定:
^ :锚定行首
$ :锚定行尾。技巧:"^$"用于匹配空白行。
\b或\<:锚定单词的词首。如"\blike"不会匹配alike,但是会匹配liker
\b或\>:锚定单词的词尾。如"\blike\b"不会匹配alike和liker,只会匹配like
\B :与\b作用相反。
分组及引用:
\(string\) :将string作为一个整体方便后面引用
\1 :引用第1个左括号及其对应的右括号所匹配的内容。
\2 :引用第2个左括号及其对应的右括号所匹配的内容。
\n :引用第n个左括号及其对应的右括号所匹配的内容。
grep同时排除多个关键字,例如需要排除 abc.txt 中的 mmm nnn
grep -v 'mmm\|nnn' abc.txt
9.find
find 目录 文件名 查找文件
find 目录 -文件类型 文件名 查找文件,指定查找的文件类型
find 目录 -文件类型 文件名 | xargs rm 把查找出来的文件删除
10.进入Linux文本编辑器
vi/vim filename
vi/vim工作模式:
末行模式下的一些常用命令:
dd:删除游标所在的那一整行
ndd:删除光标所在的向下 n 行,例如 20dd 则是删除 20 行 (常用)
dG:删除光标所在到最后一行的所有数据
yy:复制游标所在的那一行
nyy:复制光标所在的向下 n 行,例如 20yy 则是复制 20 行(常用)
p/P:p 为将已复制的数据在光标下一行贴上,P 则为贴在游标上一行! 举例来说,我目前光标在第 20 行,且已经复制了 10 行数据。则按下 p 后, 那 10 行数据会贴在原本的 20 行之后,亦即由 21 行开始贴。但如果是按下 P 呢? 那么原本的第 20 行会被推到变成 30 行。 (常用)
/string:全文搜索字符串
?string:全文搜索字符串
:.s/oldstring/newstring/g:在当前行进行替换操作
:$s/oldstring/newstring/g:在最后一行进行替换操作
:n,$s/oldstring/newstring/g:从第n行开始全文替换
11.wc
统计指定文件中的字节数、字数、行数,并将统计结果显示输出,如果没有给出文件名,则从标准输入读取
wc -c filename 统计字节数
wc -l filenaem 统计行数
-m 统计字符数。这个参数不能与 -c 参数一起使用。
-w 统计字数。一个字被定义为空白、跳格或换行字符分隔的字符串。
-L 打印最长行的长度
--help 显示帮助信息
--version 显示版本信息
12.awk
awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。awk语言的最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作。awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本。
语法: awk '{pattern + action}' {filenames}
pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。 pattern就是要表示的正则表达式,用斜杠括起来。
awk的内置变量
ARGC | 命令行参数个数 |
ARGV | 命令行参数排列 |
ENVIRON | 支持队列中系统环境变量的使用 |
FILENAME | awk 浏览的文件名 |
FNR | 浏览文件的记录数 |
FS | 设置输入域分隔符,等价于命令行 -F选项 |
NF |
|
NR | 已读的记录数 |
OFS | 输出域分隔符 |
ORS | 输出记录分隔符 |
RS | 控制记录分隔符 |
$0变量是指整条记录。$1表示当前行的第一个域,$2表示当前行的第二个域,......以此类推。
$NF是number finally,表示最后一列的信息,跟变量NF是有区别的,变量NF统计的是每行列的总数
常用命令:
搜索/etc/passwd有root关键字的所有行
awk '/root/' /etc/passwd【这种是pattern的使用,匹配了pattern(这里是root)的行才会执行action(没有指定action,默认输出每行的内容)】
统计/etc/passwd:文件名,每行的行号,每行的列数,对应的完整行内容
awk -F ':' '{print "filename:" FILENAME ",linenumber:" NR ",columns:" NF ",linecontent:"$0}' /etc/passwd
打印/etc/passwd/的第二行信息
awk -F: 'NR==2{print "filename: "FILENAME, $0}' /etc/passwd
awk的过滤使用方法:
ls -laF | awk '/^d/'
指定特定的分隔符,查询第一列
awk -F ":" '{print $1}' /etc/passwd
指定特定的分隔符,查询倒数第一列
awk -F ":" '{print $NF}' /etc/passwd
获取第12到31行的第一列的信息
awk -F ":" '{if(NR<31 && NR >12) print $1}' /etc/passwd
13.sed
sed 可依照脚本的指令来处理、编辑文本文件,sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。
语法:sed [-hnV][-e<script>][-f<script文件>][文本文件]
参数:-e: sed -e 's/系统/00/g' -e '2d' filename 执行多个指令
参数:-f:sed -f ab.log filename 多个命令写进ab.log文件里,一行一条命令,效果同-e
动作:
a 新增:
sed '2a testContent' test.txt
在第 2 行后面新增一行内容
sed '1,3a testContent' test.txt
在原文的第 1~3 行后面各新增一行内容
c 替换:
sed '2c testContent' test.txt
将第 2 行内容整行替换
sed '1,3c testContent' test.txt
将第 1~3 行内容替换成一行指定内容
d 删除:
sed '2d' test.txt
删除第 2 行
sed '1,3d' test.txt
删除第1~3行
i 插入:
sed '2i testContent' test.txt
在第 2 行前面插入一行内容
sed '1,3i testContent' test.txt
在原文的第 1~3 行前面各插入一行内容
p 打印:
sed '2p' test.txt
重复打印第 2 行
sed '1,3p' test.txt
重复打印第1~3行
sed -n '2p' test.txt
只打印第 2 行
sed -n '1,3p' test.txt
只打印第 1~3 行
sed -n '/user/p' test.txt
打印匹配到user的行,类似grep
sed -n '/user/!p' test.txt
! 反选,打印没有匹配到user的行
sed -n 's/old/new/gp' test
只打印匹配替换的行
s 替换:
sed 's/old/new/' test.txt
匹配每一行的第一个old替换为new
sed 's/old/new/gi' test.txt
匹配所有old替换为new,g 代表一行多个,i 代表匹配忽略大小写
sed '3,9s/old/new/gi' test.txt
匹配第 3~9 行所有old替换为new
14.tar
tar功能:(1)将多个文文件打包为一个文件,(2)将文件打包并压缩,(3)将打包的文件解包,(4)将打包压缩的文件解压
(1)将多个文件打包为一个文件,文件名为filename.tar
tar -cvf filename.tar *.txt/*.c
(2)将文件打包并压缩,文件名为filename.tar.gz
tar -zcvf filename.tar.gz *.txt
将文件打包并压缩,文件名为filename.tar.bz2
tar -jcvf filename.tar.bz2 *.txt
(3)解包
列出filename.tar包中的文件,只是查看包中内容,并不是真正的解压
tar -tf filename.tar
将打包的文件解包:
tar -xvf filename.tar
(4)解压
将 test.tar.gz 解压
tar -zxvf filename.tar.gz
将 test.tar.bz2 解压
tar -jxvf test.tar.bz2
ter命令还可对目录文件进行打包压缩:
tar -czf small.tar.gz small(目录名) ;
当然还可排除目录中的某一个或多个子目录进行打包压缩,在此就不举例了。
主要命令选项解释:
-c:创建
-v:详细地列出处理的文件过程
-f:指定目标为文件而不是设备
-x:释放,从归档中解出文件
-z:通过 gzip 压缩归档
-j:通过 bzip2 压缩归档
-t:列出归档内容
15.gzip压缩和解压命令
gzip 命令只能用来压缩文件,不能压缩目录,即便指定了目录,也只能压缩目录内的所有文件,原因在该命令的结尾处有解释。
-c | 将压缩数据输出到标准输出中,并保留源文件。 |
-d | 对压缩文件进行解压缩。 |
-r | 递归压缩指定目录下以及子目录下的所有文件。 |
-v | 对于每个压缩和解压缩的文件,显示相应的文件名和压缩比。 |
-l | 对每一个压缩文件,显示以下字段:
|
-数字 | 用于指定压缩等级,-1 压缩等级最低,压缩比最差;-9 压缩比最高。默认压缩比是 -6。 |
在 Linux 中,打包和压缩是分开处理的。tar命令既可以对文件打包,也可以进行压缩和解压,tar对普通文件和目录文件均可进行这些操作;而 gzip 命令只会压缩,不能打包,所以才会出现没有压缩目录,而只把目录下的文件进行压缩的情况,
16.diff 比较文件
diff命令用于比较文件的内容,特别是比较两个版本不同的文件以找到改动的地方。diff会在命令行中打印每一个行的改动,比较是针对文件内容与文件名无关。
diff (-y) a.c b.c
-y参数可以在屏幕左右两端显示出两个文件相同的部分
17.sort 排序工具
sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。
参数:
-b 忽略每行前面开始出的空格字符
-c 检查文件是否已经按照顺序排序
-d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符
-f 排序时,将小写字母视为大写字母
-i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符
-m 将几个排序好的文件进行合并
-M 将前面3个字母依照月份的缩写进行排序
-n 依照数值的大小排序。当你比较10和2 时,sort会将,数字按字符来排序了,排序程序会先比较1和2,显然1小,所以就将10放在2前面,而当你想要比较数值的大小时,可加-n来控制
-r 以相反的顺序来排序
-t<分隔字符> 指定排序时所用的栏位分隔字符,例如:-t'-',指定分隔符为‘-’
18.uniq 内容去重
该命令用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用。
uniq filename 删除文件中重复的行
检查文件并删除文件中重复出现的行,并在行首显示该行重复出现的次数
uniq -c testfile
注意:当重复的行并不相邻时,uniq 命令是不起作用的,这时我们可以使用sort
sort testfile1 | uniqsort testfile1 | uniq -c
参数
-c 在每列旁边显示该行重复出现的次数
-d仅显示重复出现的行列
-u仅显示出现一次的行列
参考文章:
grep:https://www.cnblogs.com/flyor/p/6411140.html
sed:https://www.cnblogs.com/zhangzongjian/p/10708222.html
awk:https://www.cnblogs.com/ftl1012/p/9250541.html