linux常用命令
grep
grep 命令用于查找文件里符合条件的字符串。
查找到符合的内容,就会把含有符合内容的那一列显示出来。
1 | grep "文件内容" 文件名 |
参数:
- -a 或 –text : 不要忽略二进制的数据。
- -A<显示行数> 或 –after-context=<显示行数> : 除了显示符合范本样式的那一列之外,并显示该行之后的内容。
- -b 或 –byte-offset : 在显示符合样式的那一行之前,标示出该行第一个字符的编号。
- -B<显示行数> 或 –before-context=<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前的内容。
- -c 或 –count : 计算符合样式的列数。
- -C<显示行数> 或 –context=<显示行数>或-<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前后的内容。
- -d <动作> 或 –directories=<动作> : 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。
- -e<范本样式> 或 –regexp=<范本样式> : 指定字符串做为查找文件内容的样式。
- -E 或 –extended-regexp : 将样式为延伸的正则表达式来使用。
- -f<规则文件> 或 –file=<规则文件> : 指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。
- -F 或 –fixed-regexp : 将样式视为固定字符串的列表。
- -G 或 –basic-regexp : 将样式视为普通的表示法来使用。
- -h 或 –no-filename : 在显示符合样式的那一行之前,不标示该行所属的文件名称。
- -H 或 –with-filename : 在显示符合样式的那一行之前,表示该行所属的文件名称。
- -i 或 –ignore-case : 忽略字符大小写的差别。
- -l 或 –file-with-matches : 列出文件内容符合指定的样式的文件名称。
- -L 或 –files-without-match : 列出文件内容不符合指定的样式的文件名称。
- -n 或 –line-number : 在显示符合样式的那一行之前,标示出该行的列数编号。
- -o 或 –only-matching : 只显示匹配PATTERN 部分。
- -q 或 –quiet或–silent : 不显示任何信息。
- -r 或 –recursive : 此参数的效果和指定”-d recurse”参数相同。
- -s 或 –no-messages : 不显示错误信息。
- -v 或 –invert-match : 显示不包含匹配文本的所有行。
- -V 或 –version : 显示版本信息。
- -w 或 –word-regexp : 只显示全字符合的列。
- -x –line-regexp : 只显示全列符合的列。
- -y : 此参数的效果和指定”-i”参数相同。
此外,如果想要搜索以某些字符结尾的字段,可以加上$
符号匹配结尾,如:
1 | grep "xxx.conf$" * |
awk
格式:
1 | awk [option] '{pattern[action]}' {filenames} # 行匹配语句 awk '' 只能用单引号\ |
- Action指的是动作,awk擅长文本格式化,且输出格式化后的结果,因此最常用的动作就是打印动作
print
和printf
awk场景
1 | cat test |
执行命令awk '{print $1} test'
,结果输出第一列信息。
1 | 7 |
awk默认以空格为分隔符,且多个空格也识别为一个空格,作为分隔符;
awk是按行处理文件,一行处理完毕,接着处理下一行,根据用户指定的分隔符去工作,没有指定则默认空格。
$0
表示整行,又因为awk按行处理,所以print $0
会输出全部内容,$1
表示第一列。$(NF)
表示当前分割后的最后一列,$(NF-1)
表示倒数第二列(必须要加上括号)。
awk内置变量
内置变量 | 解释 |
---|---|
$n | 指定分隔符后,当前记录的第n个字段 |
$0 | 完整的输入记录 |
FS | 字段分隔符,默认是空格 |
$NF(number of fields) | 分割后,当前行一共有多少个字段 |
NR(number of records) | 当前记录数,行数 |
- awk的内置变量NR、NF是不用添加$符号的,而要取出该列对应的内容时候,才需要加$符号
自定义输出内容
awk,必须外层单引号
,内容双引号
内置变量$1
,$2
都不能添加双引号,否则会识别为文本,尽量别加引号;此外这两个内置变量之间的逗号会使得输出以空格为分隔符,不加逗号会没有分隔符。
自定义输出第N列内容
1
2
3
4
5$ awk '{print "第一列:"$1,"第二列:"$2 }' test
第一列:#Fields:id 第二列:language
第一列:7 第二列:en
第一列:8 第二列:hu
.....自定义输出文件m~n行内容:设置 模式(条件)
1
2
3
4
5$ awk 'NR==2,NR==5{print $0}' test
7 en 1 英语
8 hu 2 匈牙利语
9 fr 4 法语
10 ro 8 罗马尼亚语给每一行的内容添加行号:添加遍历,NR等于行号,$0表示一整行内容
1
2
3
4
5
6$ awk '{print NR,$0}' test
1 #Fields:id language language_id language_name
2 7 en 1 英语
3 8 hu 2 匈牙利语
4 9 fr 4 法语
......
awk参数
参数 | 解释 |
---|---|
-F | 指定分隔字段符 |
-v | 定义或修改一个awk内部的变量 |
-f | 从脚本文件中读取awk命令 |
FS(field separator)输入分隔符:通过
-F
参数修改输入的分隔符。(假设test文本里的字段都是用
:
分隔的)1
2
3
4
5
6$ awk -F ":" '{print $1,$(NF-1),$4}' test
#Fields language_id language_id
#7 1 英语
#8 2 匈牙利语
#9 4 法语
#10 8 罗马尼亚语OFS(output field separator)输出分隔符:通过
-v
来修改输出内容的分隔符,$1,$NF
之间加上逗号,本应是用空格分隔输出内容,但是通过-v OFS="---"
修改为用---
来分隔输出内容。1
2
3
4
5
6$ awk -F ":" -v OFS="---" '{print $1,$NF}' test
#Fields---language_name
#7---英语
#8---匈牙利语
#9---法语
.....
awk动作:格式化输出
awk动作包括两个打印动作print
和printf
printf
命令用于格式化输出,它输出不带换行符,参数如下:
- %s:字符串
- %f:浮点格式(也就是我们概念中的float或者double)
- %b:相对应的参数中包含转义字符时,可以使用此替换符进行替换,对应的转义字符会被转义。
- %c:ASCII字符。显示相对应参数的第一个字符
- %d,:%i:十进制整数
- %o:不带正负号的八进制值
- %u:不带正负号的十进制值
- %x:不带正负号的十六进制值,使用a至f表示10至15
- %X:不带正负号的十六进制值,使用A至F表示10至15
- %% 表示”%”本身
- -:减号代表输出的内容进行左对齐
1 | $ awk 'BEGIN{printf "%-25s\t %-25s\t %-25s\t\n", "id1", "id2", "id3"} {printf "%-25s\t%-25s\t%-25s\n",$2,$3,$4}' hzh_test |
awk模式pattern
BEGIN/END模式
awk的
BEGIN
和END
- BEGIN模式是处理文本之前需要执行的操作
- END模式是处理完所有行之后执行的操作
1
2
3
4
5
6$ awk 'BEGIN{print "处理之前开始执行的操作"} {print $0} END{print "所有文本处理完之 后执行的操作"} hzh_test
处理之前开始执行的操作
7 en 1 英语
8 hu 2 匈牙利语
9 fr 4 法语
所有文本处理完之后执行的操作关系运算模式
例子1:
1
2$ awk 'NR==2,NR==5{print $0}' test
$ awk 'NR!=2{print $0}' test例子2:将某一列的数值相加
1
2$ cat hzh_test |awk '{sum += $1} END{print sum}'
255空模式
不指定任何模式
sort
Linux sort命令将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。
语法:
1 | sort [OPTION]… [FILE]… |
参数说明:
- -b 忽略每行前面开始出的空格字符。
- -c 检查文件是否已经按照顺序排序。
- -d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
- -f 排序时,将小写字母视为大写字母。
- -i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
- -m 将几个排序好的文件进行合并。
- -M 将前面3个字母依照月份的缩写进行排序。
- -n 依照数值的大小排序。
- -u 意味着是唯一的(unique),输出的结果是去完重了的。
- -o<输出文件> 将排序后的结果存入指定的文件。
- -r 以相反的顺序来排序。
- -t<分隔字符> 指定排序时所用的栏位分隔字符。
- +<起始栏位>-<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
- –help 显示帮助。
- –version 显示版本信息。
- [-k field1[,field2]] 按指定的列进行排序。
uniq
Linux uniq 命令用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用。
uniq 可检查文本文件中重复出现的行列。当重复的行并不相邻时,uniq 命令是不起作用的。
语法:
1 | uniq [OPTION]… [FILE]… |
参数:
- -c或–count 在每列旁边显示该行重复出现的次数。
- -d或–repeated 仅显示重复出现的行列。
- -f<栏位>或–skip-fields=<栏位> 忽略比较指定的栏位。
- -s<字符位置>或–skip-chars=<字符位置> 忽略比较指定的字符。
- -u或–unique 仅显示出一次的行列。
- -w<字符位置>或–check-chars=<字符位置> 指定要比较的字符。
- –help 显示帮助。
- –version 显示版本信息。
- [输入文件] 指定已排序好的文本文件。如果不指定此项,则从标准读取数据;
- [输出文件] 指定输出的文件。如果不指定此选项,则将内容显示到标准输出设备(显示终端)。
head
head 命令可用于查看文件的开头部分的内容,有一个常用的参数 -n 用于显示行数,默认为 10,即显示 10 行的内容。
命令格式:
1 | head [参数] [文件] |
参数:
- -q 隐藏文件名
- -v 显示文件名
- -c<数目> 显示的字节数。
- -n<行数> 显示的行数。
wc
Linux wc命令用于计算字数。
利用wc指令我们可以计算文件的Byte数、字数、或是列数,若不指定文件名称、或是所给予的文件名为”-“,则wc指令会从标准输入设备读取数据。
在默认的情况下,wc将计算指定文件的行数、字数,以及字节数。使用的命令为:
1 | wc 文件名 |
参数:
- -c或–bytes或–chars 只显示Bytes数。
- -l或–lines 显示行数。
- -w或–words 只显示字数。
- –help 在线帮助。
- –version 显示版本信息。
wc命令常常配合其他命令来用,如:
查找文件中字符“100”的个数;
1
grep "100" 文件名 | wc -l
查找文件夹里文件的个数:
1
ll | wc -l
more
Linux more 命令类似 cat ,不过会以一页一页的形式显示,更方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示,而且还有搜寻字串的功能(与 vi 相似),使用中的说明文件,请按 h 。
语法如下:
1 | more [-dlfpcsu] [-num] [+/pattern] [+linenum] [fileNames..] |
参数:
- -num 一次显示的行数
- -d 提示使用者,在画面下方显示 [Press space to continue, ‘q’ to quit.] ,如果使用者按错键,则会显示 [Press ‘h’ for instructions.] 而不是 ‘哔’ 声
- -l 取消遇见特殊字元 ^L(送纸字元)时会暂停的功能
- -f 计算行数时,以实际上的行数,而非自动换行过后的行数(有些单行字数太长的会被扩展为两行或两行以上)
- -p 不以卷动的方式显示每一页,而是先清除萤幕后再显示内容
- -c 跟 -p 相似,不同的是先显示内容再清除其他旧资料
- -s 当遇到有连续两行以上的空白行,就代换为一行的空白行
- -u 不显示下引号 (根据环境变数 TERM 指定的 terminal 而有所不同)
- +/pattern 在每个文档显示前搜寻该字串(pattern),然后从该字串之后开始显示
- +num 从第 num 行开始显示
- fileNames 欲显示内容的文档,可为复数个数
mkdir
1 | mkdir dirName #在当前目录下创建目录 |
tail
tail 命令可用于查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件。
tail -f filename 会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要 filename 更新就可以看到最新的文件内容。
命令格式:
1 | tail [参数] [文件] |
参数:
- -f 循环读取
- -q 不显示处理信息
- -v 显示详细的处理信息
- -c<数目> 显示的字节数
- -n<行数> 显示文件的尾部 n 行内容
- –pid=PID 与-f合用,表示在进程ID,PID死掉之后结束
- -q, –quiet, –silent 从不输出给出文件名的首部
- -s, –sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒
nohup
nohup 英文全称 no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行。
nohup 命令,在默认情况下(非重定向时),会输出一个名叫 nohup.out 的文件到当前目录下,如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。
语法格式:
1 | nohup Command [ Arg … ] [ & ] |
参数说明:
Command:要执行的命令。
Arg:一些参数,可以指定输出文件。
**&**:让命令在后台执行,终端退出后命令仍旧执行。
nohup与&的区别:
1 | nohup ./start.sh & |
&的意思是在后台运行, 当你在执行 ./start.sh & 的时候, 即使你用ctrl C, 那么start.sh照样运行(因为对SIGINT信号免疫)。 但是要注意, 如果你直接关掉shell后, 那么,start.sh进程同样消失。
nohup的意思是忽略SIGHUP信号, 所以当运行nohup ./start.sh的时候, 关闭shell, 那么start.sh进程还是存在的(对SIGHUP信号免疫)。 但是, 要注意, 如果你直接在shell中用Ctrl C, 那么start.sh进程也是会消失的(因为对SIGINT信号不免疫)
所以nohup结合&使用,让进程真正不受shell中Ctrl C和shell关闭的影响。
vim设置
拷贝到linux文本文件中的字符串会被再进行一下缩进。
解决办法:
1,在拷贝前输入:set paste (这样的话,vim就不会启动自动缩进,而只是纯拷贝粘贴)
2,拷贝完成之后,输入:set nopaste (关闭paste)