Linux命令教程第三期
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- awk
- 补充说明
- 语法形式
- 模式
- 示例
- 其他语句
- 数组的定义
- col
- 补充说明
- 语法
- 选项
- comm
- 补充说明
- 语法
- 选项
- 参数
- csplit
- 补充说明
- 语法
- 选项
- 参数
- 实例
- ed
- 补充说明
- 语法
- 选项
- 参数
- egrep
- 补充说明
- 语法
- 实例
- ex
- 补充说明
- 语法
- 参数
- fgrep
- 补充说明
- fmt
- 补充说明
- 语法
- 选项
- 参数
- fold
- 补充说明
- 语法
- 选项
- 参数
- ispell
- 补充说明
- 语法
- 参数
- join
- 补充说明
- 语法
- 选项
- 参数
- joe
- 补充说明
- 语法
- 选项
- 参数
- jed
- 补充说明
- 语法
- 选项
- 参数
- 实例
- grep
- 补充说明
- 选项
- look
- 补充说明
- 语法
- 选项
- 参数
- pico
- 补充说明
- 语法
- 选项
- 参数
- sed
- 补充说明
- 命令格式
- 参数
- sort
- 补充说明
- 语法
- 选项
- 参数
- 实例
- tr
- 补充说明
- 语法
- 选项
- 参数
- uniq
- 补充说明
- 语法
- 选项
- 参数
- vi
- 补充说明
- 语法
- 选项
- 参数
- 扩展
- wc
- 补充说明
- 语法
- 选项
- 总结
前言
第三期了 ( •̀ ω •́ )y
提示:本篇文章有彩蛋,
awk
文本和数据进行处理的编程语言
补充说明
awk 是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入(stdin)、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk有很多内建的功能,比如数组、函数等,这是它和C语言的相同之处,灵活性是awk最大的优势。
awk命令格式和选项
语法形式
awk [options] ‘script’ var=value file(s)
awk [options] -f scriptfile var=value file(s)
常用命令选项
- -F fs **fs指定输入分隔符,fs可以是字符串或正则表达式,如-F:
- -v var=value ** 赋值一个用户定义变量,将外部变量传递给awk
- -f scripfile 从脚本文件中读取awk命令
- -m[fr] val 对val值设置内在限制,-mf选项限制分配给val的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。
awk模式和操作
awk脚本是由模式和操作组成的。
模式
模式可以是以下任意一个:
/正则表达式/:使用通配符的扩展集。
关系表达式:使用运算符进行操作,可以是字符串或数字的比较测试。
模式匹配表达式:用运算符(匹配)和!(不匹配)。
BEGIN语句块、pattern语句块、END语句块:参见awk的工作原理
操作
操作由一个或多个命令、函数、表达式组成,之间由换行符或分号隔开,并位于大括号内,主要部分是:
变量或数组赋值
输出命令
内置函数
控制流语句
awk脚本基本结构
awk 'BEGIN{ print "start" } pattern{ commands } END{ print "end" }' file
一个awk脚本通常由:BEGIN语句块、能够使用模式匹配的通用语句块、END语句块3部分组成,这三个部分是可选的。任意一个部分都可以不出现在脚本中,脚本通常是被 单引号 或 双引号 中,例如:
awk 'BEGIN{ i=0 } { i++ } END{ print i }' filename
awk "BEGIN{ i=0 } { i++ } END{ print i }" filename
awk的工作原理
awk 'BEGIN{ commands } pattern{ commands } END{ commands }'
- 第一步:执行BEGIN{ commands }语句块中的语句;
- 第二步:从文件或标准输入(stdin)读取一行,然后执行pattern{ commands }语句块,它逐行扫描文件,从第一行到最后一行重复这个过程,直到文件全部被读取完毕。
- 第三步:当读至输入流末尾时,执行END{ commands }语句块。
BEGIN语句块 在awk开始从输入流中读取行 之前 被执行,这是一个可选的语句块,比如变量初始化、打印输出表格的表头等语句通常可以写在BEGIN语句块中。
END语句块 在awk从输入流中读取完所有的行 之后 即被执行,比如打印所有行的分析结果这类信息汇总都是在END语句块中完成,它也是一个可选语句块。
pattern语句块 中的通用命令是最重要的部分,它也是可选的。如果没有提供pattern语句块,则默认执行{ print },即打印每一个读取到的行,awk读取的每一行都会执行该语句块。
示例
echo -e "A line 1nA line 2" | awk 'BEGIN{ print "Start" } { print } END{ print "End" }'
Start
A line 1
A line 2
End
当使用不带参数的print时,它就打印当前行,当print的参数是以逗号进行分隔时,打印时则以空格作为定界符。在awk的print语句块中双引号是被当作拼接符使用,例如:
echo | awk '{ var1="v1"; var2="v2"; var3="v3"; print var1,var2,var3; }'
v1 v2 v3
双引号拼接使用:
echo | awk '{ var1="v1"; var2="v2"; var3="v3"; print var1"="var2"="var3; }'
v1=v2=v3
{ }类似一个循环体,会对文件中的每一行进行迭代,通常变量初始化语句(如:i=0)以及打印文件头部的语句放入BEGIN语句块中,将打印的结果等语句放在END语句块中。
awk内置变量(预定义变量)
说明:[A][N][P][G]表示第一个支持变量的工具,
[A]=awk、[N]=nawk、[P]=POSIXawk、[G]=gawk
$n 当前记录的第n个字段,比如n为1表示第一个字段,n为2表示第二个字段。
$0 这个变量包含执行过程中当前行的文本内容。
[N] ARGC 命令行参数的数目。
[G] ARGIND 命令行中当前文件的位置(从0开始算)。
[N] ARGV 包含命令行参数的数组。
[G] CONVFMT 数字转换格式(默认值为%.6g)。
[P] ENVIRON 环境变量关联数组。
[N] ERRNO 最后一个系统错误的描述。
[G] FIELDWIDTHS 字段宽度列表(用空格键分隔)。
[A] FILENAME 当前输入文件的名。
[P] FNR 同NR,但相对于当前文件。
[A] FS 字段分隔符(默认是任何空格)。
[G] IGNORECASE 如果为真,则进行忽略大小写的匹配。
[A] NF 表示字段数,在执行过程中对应于当前的字段数。
[A] NR 表示记录数,在执行过程中对应于当前的行号。
[A] OFMT 数字的输出格式(默认值是%.6g)。
[A] OFS 输出字段分隔符(默认值是一个空格)。
[A] ORS 输出记录分隔符(默认值是一个换行符)。
[A] RS 记录分隔符(默认是一个换行符)。
[N] RSTART 由match函数所匹配的字符串的第一个位置。
[N] RLENGTH 由match函数所匹配的字符串的长度。
[N] SUBSEP 数组下标分隔符(默认值是34)。
示例
echo -e "line1 f2 f3nline2 f4 f5nline3 f6 f7" | awk '{print "Line No:"NR", No of fields:"NF, "$0="$0, "$1="$1, "$2="$2, "$3="$3}'
Line No:1, No of fields:3 $0=line1 f2 f3 $1=line1 $2=f2 $3=f3
Line No:2, No of fields:3 $0=line2 f4 f5 $1=line2 $2=f4 $3=f5
Line No:3, No of fields:3 $0=line3 f6 f7 $1=line3 $2=f6 $3=f7
使用print NF可以打印出一行中的最后一个字段,使用NF可以打印出一行中的最后一个字段,使用NF可以打印出一行中的最后一个字段,使用(NF-1)则是打印倒数第二个字段,其他以此类推:
echo -e "line1 f2 f3n line2 f4 f5" | awk '{print $NF}'
f3
f5
echo -e "line1 f2 f3n line2 f4 f5" | awk '{print $(NF-1)}'
f2
f4
打印每一行的第二和第三个字段:
awk '{ print $2,$3 }' filename
统计文件中的行数:
awk 'END{ print NR }' filename
以上命令只使用了END语句块,在读入每一行的时,awk会将NR更新为对应的行号,当到达最后一行NR的值就是最后一行的行号,所以END语句块中的NR就是文件的行数。
一个每一行中第一个字段值累加的例子:
seq 5 | awk 'BEGIN{ sum=0; print "总和:" } { print $1"+"; sum+=$1 } END{ print "等于"; print sum }'
总和:
1+
2+
3+
4+
5+
等于
15
将外部变量值传递给awk
借助 -v选项 ,可以将外部值(并非来自stdin)传递给awk:
VAR=10000
echo | awk -v VARIABLE=$VAR '{ print VARIABLE }'
另一种传递外部变量方法:
var1="aaa"
var2="bbb"
echo | awk '{ print v1,v2 }' v1=$var1 v2=$var2
当输入来自于文件时使用:
awk '{ print v1,v2 }' v1=$var1 v2=$var2 filename
以上方法中,变量之间用空格分隔作为awk的命令行参数跟随在BEGIN、{}和END语句块之后。
awk运算与判断
作为一种程序设计语言所应具有的特点之一,awk支持多种运算,这些运算与C语言提供的基本相同。awk还提供了一系列内置的运算函数(如log、sqr、cos、sin等)和一些用于对字符串进行操作(运算)的函数(如length、substr等等)。这些函数的引用大大的提高了awk的运算功能。作为对条件转移指令的一部分,关系判断是每种程序设计语言都具备的功能,awk也不例外,awk中允许进行多种测试,作为样式匹配,还提供了模式匹配表达式(匹配)和!(不匹配)。作为对测试的一种扩充,awk也支持用逻辑运算符。
算术运算符
运算符 描述
- 加,减
- / & 乘,除与求余
- ! 一元加,减和逻辑非
^ *** 求幂
++ – 增加或减少,作为前缀或后缀
例:
- ! 一元加,减和逻辑非
awk 'BEGIN{a="b";print a++,++a;}'
0 2
注意:所有用作算术运算符进行操作,操作数自动转为数值,所有非数值都变为0
赋值运算符
运算符 描述
= += -= *= /= %= ^= **= 赋值语句
例:
a+=5; 等价于:a=a+5; 其它同类
逻辑运算符
运算符 描述
|| 逻辑或
&& 逻辑与
例:
awk 'BEGIN{a=1;b=2;print (a>5 && b<=2),(a>5 || b<=2);}'
0 1
正则运算符
运算符 描述
~ ~! 匹配正则表达式和不匹配正则表达式
例:
awk 'BEGIN{a="100testa";if(a ~ /^100*/){print "ok";}}'
ok
关系运算符
运算符 描述
< <= > >= != == 关系运算符
例:
awk 'BEGIN{a=11;if(a >= 9){print "ok";}}'
ok
注意:> < 可以作为字符串比较,也可以用作数值比较,关键看操作数如果是字符串就会转换为字符串比较。两个都为数字才转为数值比较。字符串比较:按照ASCII码顺序比较。
其它运算符:
运算符 描述
$ 字段引用
空格 字符串连接符
?: C条件表达式
in 数组中是否存在某键值
例:
awk 'BEGIN{a="b";print a=="b"?"ok":"err";}'
ok
awk 'BEGIN{a="b";arr[0]="b";arr[1]="c";print (a in arr);}'
0
awk 'BEGIN{a="b";arr[0]="b";arr["b"]="c";print (a in arr);}'
1
运算级优先级表
!级别越高越优先
级别越高越优先
awk高级输入输出
读取下一条记录
awk中next语句使用:在循环逐行匹配,如果遇到next,就会跳过当前行,直接忽略下面语句。而进行下一行匹配。net语句一般用于多行合并:
cat text.txt
a
b
c
d
e
awk 'NR%2==1{next}{print NR,$0;}' text.txt
2 b
4 d
当记录行号除以2余1,就跳过当前行。下面的print NR,$0也不会执行。下一行开始,程序有开始判断NR%2值。这个时候记录行号是:2 ,就会执行下面语句块:‘print NR,$0’
分析发现需要将包含有“web”行进行跳过,然后需要将内容与下面行合并为一行:
cat text.txt
web01[192.168.2.100]
httpd ok
tomcat ok
sendmail ok
web02[192.168.2.101]
httpd ok
postfix ok
web03[192.168.2.102]
mysqld ok
httpd ok
0
awk '/^web/{T=$0;next;}{print T":t"$0;}' test.txt
web01[192.168.2.100]: httpd ok
web01[192.168.2.100]: tomcat ok
web01[192.168.2.100]: sendmail ok
web02[192.168.2.101]: httpd ok
web02[192.168.2.101]: postfix ok
web03[192.168.2.102]: mysqld ok
web03[192.168.2.102]: httpd ok
简单地读取一条记录
awk getline用法:输出重定向需用到getline函数。getline从标准输入、管道或者当前正在处理的文件之外的其他输入文件获得输入。它负责从输入获得下一行的内容,并给NF,NR和FNR等内建变量赋值。如果得到一条记录,getline函数返回1,如果到达文件的末尾就返回0,如果出现错误,例如打开文件失败,就返回-1。
getline语法:getline var,变量var包含了特定行的内容。
awk getline从整体上来说,用法说明:
当其左右无重定向符|或<时: getline作用于当前文件,读入当前文件的第一行给其后跟的变量var或$0(无变量),应该注意到,由于awk在处理getline之前已经读入了一行,所以getline得到的返回结果是隔行的。
当其左右有重定向符|或<时: getline则作用于定向输入文件,由于该文件是刚打开,并没有被awk读入一行,只是getline读入,那么getline返回的是该文件的第一行,而不是隔行。
示例:
执行linux的date命令,并通过管道输出给getline,然后再把输出赋值给自定义变量out,并打印它:
awk 'BEGIN{ "date" | getline out; print out }' test
执行shell的date命令,并通过管道输出给getline,然后getline从管道中读取并将输入赋值给out,split函数把变量out转化成数组mon,然后打印数组mon的第二个元素:
awk 'BEGIN{ "date" | getline out; split(out,mon); print mon[2] }' test
命令ls的输出传递给geline作为输入,循环使getline从ls的输出中读取一行,并把它打印到屏幕。这里没有输入文件,因为BEGIN块在打开输入文件前执行,所以可以忽略输入文件。
awk 'BEGIN{ while( "ls" | getline) print }'
关闭文件
awk中允许在程序中关闭一个输入或输出文件,方法是使用awk的close语句。
close("filename")
filename可以是getline打开的文件,也可以是stdin,包含文件名的变量或者getline使用的确切命令。或一个输出文件,可以是stdout,包含文件名的变量或使用管道的确切命令。
输出到一个文件
awk中允许用如下方式将结果输出到一个文件:
echo | awk '{printf("hello word!n") > "datafile"}'
或
echo | awk '{printf("hello word!n") >> "datafile"}'
设置字段定界符
默认的字段定界符是空格,可以使用-F “定界符” 明确指定一个定界符:
awk -F: '{ print $NF }' /etc/passwd
或
awk 'BEGIN{ FS=":" } { print $NF }' /etc/passwd
在BEGIN语句块中则可以用OFS=“定界符”设置输出字段的定界符。
流程控制语句
在linux awk的while、do-while和for语句中允许使用break,continue语句来控制流程走向,也允许使用exit这样的语句来退出。break中断当前正在执行的循环并跳到循环外执行下一条语句。if 是流程选择用法。awk中,流程控制语句,语法结构,与c语言类型。有了这些语句,其实很多shell程序都可以交给awk,而且性能是非常快的。下面是各个语句用法。
条件判断语句
if(表达式)
语句1
else
语句2
格式中语句1可以是多个语句,为了方便判断和阅读,最好将多个语句用{}括起来。awk分枝结构允许嵌套,其格式为:
if(表达式)
{语句1}
else if(表达式)
{语句2}
else
{语句3}
示例:
awk 'BEGIN{
test=100;
if(test>90){print "very good";}else if(test>60){print "good";}else{print "no pass";}
}'
每条命令语句后面可以用; 分号 结尾。
循环语句
while语句
while(表达式)
{语句}
示例:
awk 'BEGIN{
test=100;
total=0;
while(i<=test){total+=i;i++;
}
print total;
}'
5050
for循环
for循环有两种格式:
格式1:
for(变量 in 数组)
{语句}
示例:
awk 'BEGIN{
for(k in ENVIRON){print k"="ENVIRON[k];
}}'
TERM=linux
G_BROKEN_FILENAMES=1
SHLVL=1
pwd=/root/text
...
logname=root
HOME=/root
SSH_CLIENT=192.168.1.21 53087 22
注:ENVIRON是awk常量,是子典型数组。
格式2:
for(变量;条件;表达式)
{语句}
示例:
awk 'BEGIN{
total=0;
for(i=0;i<=100;i++){total+=i;
}
print total;
}'
5050
do循环
do
{语句} while(条件)
例子:
awk 'BEGIN{
total=0;
i=0;
do {total+=i;i++;} while(i<=100)print total;
}'
5050
其他语句
break 当 break 语句用于 while 或 for 语句时,导致退出程序循环。
continue 当 continue 语句用于 while 或 for 语句时,使程序循环移动到下一个迭代。
next 能能够导致读入下一个输入行,并返回到脚本的顶部。这可以避免对当前输入行执行其他的操作过程。
exit 语句使主输入循环退出并将控制转移到END,如果END存在的话。如果没有定义END规则,或在END中应用exit语句,则终止脚本的执行。
数组应用
数组是awk的灵魂,处理文本中最不能少的就是它的数组处理。因为数组索引(下标)可以是数字和字符串在awk中数组叫做关联数组(associative arrays)。awk 中的数组不必提前声明,也不必声明大小。数组元素用0或空字符串来初始化,这根据上下文而定。
数组的定义
数字做数组索引(下标):
Array[1]="sun"
Array[2]="kai"
字符串做数组索引(下标):
Array["first"]="www"
Array"[last"]="name"
Array["birth"]="1987"
使用中print Array[1]会打印出sun;使用print Array[2]会打印出kai;使用print[“birth”]会得到1987。
读取数组的值
{ for(item in array) {print array[item]}; }
col
过滤控制字符
补充说明
col命令 是一个标准输入文本过滤器,它从标注输入设备读取文本内容,并把内容显示到标注输出设备。在许多UNIX说明文件里,都有RLF控制字符。当我们运用shell特殊字符>和>>,把说明文件的内容输出成纯文本文件时,控制字符会变成乱码,col命令则能有效滤除这些控制字符。
语法
col(选项)
选项
- -b:过滤掉所有的控制字符,包括RLF和HRLF;
- -f:滤掉RLF字符,但允许将HRLF字符呈现出来;
- -x:以多个空格字符来表示跳格字符;
- -l<缓冲区列数>:预设的内存缓冲区有128列,用户可以自行指定缓冲区的大小
comm
两个文件之间的比较
补充说明
comm命令 可以用于两个文件之间的比较,它有一些选项可以用来调整输出,以便执行交集、求差、以及差集操作。
- 交集:打印出两个文件所共有的行。
- 求差:打印出指定文件所包含的且不相同的行。
- 差集:打印出包含在一个文件中,但不包含在其他指定文件中的行。
语法
comm(选项)(参数)
选项
-1:不显示在第一个文件出现的内容;
-2:不显示在第二个文件中出现的内容;
-3:不显示同时在两个文件中都出现的内容。
参数
- 文件1:指定要比较的第一个有序文件;
- 文件2:指定要比较的第二个有序文件。
csplit
将一个大文件分割成小的碎片文件
补充说明
csplit命令 用于将一个大文件分割成小的碎片,并且将分割后的每个碎片保存成一个文件。碎片文件的命名类似“xx00”,“xx01”。csplit命令是split的一个变体,split只能够根据文件大小或行数来分割,但csplit能够根据文件本身特点来分割文件。
语法
csplit(选项)(参数)
选项
- -b<输出格式>或–suffix-format=<输出格式>:预设的输出格式其文件名称为xx00,xx01等,用户可以通过改变<输出格式>来改变输出的文件名;
- -f<输出字首字符串>或–prefix=<输出字首字符串>:预设的输出字首字符串其文件名为xx00,xx01等,如果制定输出字首字符串为“hello”,则输出的文件名称会变成hello00,hello、01…
- -k或–keep-files:保留文件,就算发生错误或中断执行,与不能删除已经输出保存的文件;
- -n<输出文件名位数>或–digits=<输出文件名位数>:预设的输出文件名位数其文件名称为xx00,xx01…如果用户指定输出文件名位数为“3”,则输出的文件名称会变成xx000,xx001等;
- -q或-s或–quiet或——silent:不显示指令执行过程;
- -z或–elide-empty-files:删除长度为0 Byte文件。
参数
文件:指定要分割的原文件;
模式:指定要分割文件时的匹配模式。
实例
示例测试文件 server.log
cat server.log
SERVER-1
[con] 10.10.10.1 suc
[con] 10.10.10.2 fai
[dis] 10.10.10.3 pen
[con] 10.10.10.4 suc
SERVER-2
[con] 10.10.10.5 suc
[con] 10.10.10.6 fai
[dis] 10.10.10.7 pen
[con] 10.10.10.8 suc
SERVER-3
[con] 10.10.10.9 suc
[con] 10.10.10.10 fai
[dis] 10.10.10.11 pen
[con] 10.10.10.12 suc
需要将server.log分割成server1.log、server2.log、server3.log,这些文件的内容分别取自原文件中不同的SERVER部分
ed
单行纯文本编辑器
补充说明
ed命令 是单行纯文本编辑器,它有命令模式(command mode)和输入模式(input mode)两种工作模式。ed命令支持多个内置命令,常见内置命令如下:
- A:切换到输入模式,在文件的最后一行之后输入新的内容;
- C:切换到输入模式,用输入的内容替换掉最后一行的内容;
- i:切换到输入模式,在当前行之前加入一个新的空行来输入内容;
- d:用于删除最后一行文本内容;
- n:用于显示最后一行的行号和内容;
- w:<文件名>:一给定的文件名保存当前正在编辑的文件;
- q:退出ed编辑器。
语法
ed(选项)(参数)
选项
- -G或——traditional:提供兼容的功能;
- -p<字符串>:指定ed在command mode的提示字符;
- -s,-,–quiet或——silent:不执行开启文件时的检查功能;
- –help:显示帮助;
- –version:显示版本信息。
参数
文件:待编辑的文件。
egrep
在文件内查找指定的字符串
补充说明
egrep命令 用于在文件内查找指定的字符串。egrep执行效果与grep -E相似,使用的语法及参数可参照grep指令,与grep的不同点在于解读字符串的方法。egrep是用extended regular expression语法来解读的,而grep则用basic regular expression 语法解读,extended regular expression比basic regular expression的表达更规范。
语法
egrep(选项)(查找模式)(文件名1,文件名2,……)
实例
显示文件中符合条件的字符。例如,查找当前目录下所有文件中包含字符串"Linux"的文件,
ex
启动vim编辑器的ex编辑模式
补充说明
在 ex 模式下启动vim文本编辑器。ex执行效果如同vi -E,适用于法及参数可参照vi指令,如要从Ex模式回到普通模式,则在vim中输入:vi或:visual即可。
语法
ex(参数)
参数
文件:指定待编辑的文件。
fgrep
为文件搜索文字字符串
补充说明
fgrep命令 是用来搜索 file 参数指定的输入文件(缺省为标准输入)中的匹配模式的行。fgrep 命令特别搜索 Pattern 参数,它们是固定的字符串。如果在 File 参数中指定一个以上的文件 fgrep 命令将显示包含匹配行的文件。
fgrep 命令于 grep 和 egrep 命令不同,因为它搜索字符串而不是搜索匹配表达式的模式。fgrep 命令使用快速的压缩算法。$, *, &
fmt
读取文件后优化处理并输出
补充说明
fmt命令 读取文件的内容,根据选项的设置对文件格式进行简单的优化处理,并将结果送到标准输出设备。
语法
fmt(选项)(参数)
选项
- -c或–crown-margin:每段前两列缩排;
- -p<列起始字符串>或-prefix=<列起始字符串>:仅合并含有指定字符串的列,通常运用在程序语言的注解方面;
- -s或–split-only:只拆开字数超出每列字符数的列,但不合并字数不足每列字符数的列;
- -t或–tagged-paragraph:每列前两列缩排,但第1列和第2列的缩排格式不同;
- -u或–uniform-spacing:每列字符之间都以一个空格字符间隔,每个句子之间则两个空格字符分隔;
- -w<每列字符数>或–width=<每列字符数>或-<每列字符数>:设置每列的最大字符数。
参数
指定要优化格式的文件。
fold
控制文件内容输出时所占用的屏幕宽度
补充说明
fold命令 用于控制文件内容输出时所占用的屏幕宽度。fold命令会从指定的文件里读取内容,将超过限定列宽的列加入增列字符后,输出到标准输出设备。若不指定任何文件名称,或是所给予的文件名为“-”,则fold指令会从标准输入设备读取数据。
语法
fold(选项)(参数)
选项
- -b或——bytes:以Byte为单位计算列宽,而非采用行数编号为单位;
- -s或——spaces:以空格字符作为换列点;
- -w<每列行数>或–width<每列行数>:设置每列的最大行数。
参数
文件:指定要显示内容的文件。
ispell
检查文件中出现的拼写错误
补充说明
ispell命令 用于检查文件中出现的拼写错误。
语法
ispell(参数)
参数
文件:指定要进行拼写检查的文件。
join
两个文件中指定栏位内容相同的行连接起来
补充说明
join命令 用来将两个文件中,制定栏位内容相同的行连接起来。找出两个文件中,指定栏位内容相同的行,并加以合并,再输出到标准输出设备。
语法
join(选项)(参数)
选项
- -a<1或2>:除了显示原来的输出内容之外,还显示指令文件中没有相同栏位的行;
- -e<字符串>:若[文件1]与[文件2]中找不到指定的栏位,则在输出中填入选项中的字符串;
- -i或–ignore-case:比较栏位内容时,忽略大小写的差异;
- -o<格式>:按照指定的格式来显示结果;
- -t<字符>:使用栏位的分割字符;
- -v<1或2>:更-a相同,但是只显示文件中没有相同栏位的行;
- -1<栏位>:连接[文件1]指定的栏位;
- -2<栏位>:连接[文件2]指定的栏位。
参数
文件1:要进行合并操作的第1个文件参数;
文件2:要进行合并操作的第2个文件参数。
joe
强大的纯文本编辑器
补充说明
joe命令 是一款功能强大的纯文本编辑器,拥有众多编写程序和文本的优良特性。
语法
joe(选项)(参数)
选项
- -force:强制在最后一行的结尾处加上换行符号;
- -lines<行数>:设置行数;
- -lightoff:选取的区块在执行完区块命令后,就会恢复成原来的状态;
- -autoindent:自动缩排;
- -backpath:<目录>:指定备份文件的目录;
- -beep:编辑时,若有错误即发出哔声;
- -columns<栏位>:设置栏数;
- -csmode:可执行连续查找模式;
- -dopadding:是程序跟tty间存在缓冲区;
- -exask:在程序中,执行“Ctrl+k+x”时,会先确认是否要保存文件;
- -force:强制在最后一行的结尾处加上换行符号;
- -help:执行程序时一并显示帮助;
- -keepup:在进入程序后,画面上方为状态列;
- -marking:在选取区块时,反白区块会随着光标移动;
- -mid:当光标移出画面时,即自动卷页,使光标回到中央;
- -nobackups:不建立备份文件;
- -nonotice:程序执行时,不显示版本信息;
- -nosta:程序执行时,不显示状态列;
- -noxon:尝试取消“Ctrl+s”和“Ctrl+q”键的功能;
- -orphan:若同时开启一个以上的文件,则其他文件会置于独立的缓冲区,而不会另外开启编辑区;
- -pg<行数>:按“PageUp”或“PageDown”换页时,所要保留前一页的行数;
- -skiptop<行数>:不使用屏幕上方指定的行数。
参数
文件:指定要编辑的文件。
jed
主要用于编辑代码的编辑器
补充说明
jed命令 是由Slang所开发,其主要用用途是编辑程序的源代码。它支持彩色语法加亮显示,可以模拟emacs,EDT,wordstar和Brief编辑器。
语法
jed(选项)(参数)
选项
- -2:显示上下两个编辑区;
- -batch:以批处理模式来执行;
- -f<函数>:执行Slang函数;
- -g<行数>:移到缓冲区中指定的行数;
- -i<文件>:将指定的文件载入缓冲区;
- -n:不要载入jed.rc配置文件;
- -s<字符串>:查找并移到指定的字符串。
参数
文件:指定待编辑的文件列表。
实例
以上下两个编辑区的方式,开启 mysource.c 原始代码文件。若要切换编辑区,可利用稍后介绍的命令,开启操作命令,开启功能表后,按 3 ,再按 2 ,即可切换编辑区:
jed -2 mysource.c
操作
有些Emacs的组合键和jed菜单组合键冲突例如Alt+f在Emacs中应该是“前进一个单词”,而在jed中则是“文件菜单” 想使用Emacs风格的组合键的话,编辑/usr/share/jed/lib/menus.slc找到如下段落:
unsetsetkey ("selectmenubar", "\em");
unsetsetkey ("@\emF", "\ef");
unsetsetkey ("@\emE", "\ee");
unsetsetkey ("@\emo", "\eo");
% Mode menu unsetsetkey ("@\emS", "\es");
unsetsetkey ("@\emB", "\eb");
unsetsetkey ("@\emi", "\ei");
unsetsetkey ("@\emH", "\eh");
unset_setkey ("@\emy", "\ey");
可以根据自己的需要修改,也可以简单的注释掉;使用菜单可以用F10键。
由于Jed可模拟多种编辑器,其各自按键指令也有所不同。这里以模拟 Emacs 为例,说明在编辑器中的操作方法。
文件
/usr/share/jed/lib/*.sl 这是默认的运行jed slang的文件。
/usr/share/jed/lib/site.sl 这是默认的启动文件。
/etc/jed.rc 这是全局系统配置文件。
~/.jedrc 这是用户配置文件。
grep
强大的文本搜索工具
补充说明
grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。用于过滤/搜索的特定字符。可使用正则表达式能多种命令配合使用,使用上十分灵活。
选项
-a --text
look
显示文件中以指定字符串开头的任意行
补充说明
look命令 用于显示文件中以指定字符串开头的任意行。
语法
look(选项)(参数)
选项
- -a:使用另一个字典文件web2,该文件也位于/usr/dict目录下;
- -d:只对比英文字母和数字,其余一概忽略不予比对;
- -f:忽略字符大小写差别;
- -t<字尾字符串>:设置字尾字符串。
参数
字符串:指定要查找的字符串;
文件:指定要查找的目标文件。
pico
功能强大全屏幕的文本编辑器
补充说明
pico命令 是功能强大全屏幕的文本编辑器。pico的操作简单,提供了丰富的快捷键。常用的快捷键如下:
- Ctrl+G:获得pico的帮助信息;
- Ctrl+O:保存文件内容,如果是新文件,需要输入文件名;
- Ctrl+R:在当前光标位置插入一个指定的文本文件内容;
- Ctrl+Y:向前翻页;
- Ctrl+V:向后翻页;
- Ctrl+w:对文件进行搜索;
- Ctrl+K:剪切当前文件行到粘贴缓冲区;
- Ctrl+U:粘贴缓冲区中的内容到当前光标所在位置;
- Ctrl+C:显示当前光标位置;
- Ctrl+T:调用拼写检查功能,对文档进行拼写检查;
- Ctrl+J:段落重排;
- Ctrl+X:退出,当文件内容发生改变时,提供是否保存修改。
语法
pico(选项)(参数)
选项
- -b:开启置换的功能;
- -d:开启删除的功能;
- -e:使用完整的文件名称;
- -f:支持键盘上F1、F2…功能键;
- -g:显示光标;
- -h:在线帮助;
- -j:开启切换的功能;
- -k:预设pico在使用剪下命令时,会把光标所在的列的内容全部删除;
- -m:开启鼠标支持的功能,您可用鼠标点选命令列表;
- -n<间隔秒数>:设置多久检查一次新邮件;
- -o<工作目录>:设置工作目录;
- -q:忽略预设值;
- -r<编辑页宽>:设置编辑文件的页宽;
- -s<拼字检查器>:另外指定拼字检查器;
- -t:启动工具模式;
- -v:启动阅读模式,用户只能观看,无法编辑文件的内容;
- -w:关闭自动换行,通过这个参数可以编辑内容很长的列;
- -x:关闭页面下方的命令列表;
- -z:让pico可被Ctrl+z中断,暂存在后台作业里;
- +<列表编号>:执行pico指令进入编辑模式时,从指定的列数开始编辑。
参数
文件:指定要编辑的文件。
sed
功能强大的流式文本编辑器
补充说明
sed 是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
sed的选项、命令、替换标记
命令格式
sed [options] 'command' file(s)
sed [options] -f scriptfile file(s)
选项
- -e
参数
文件:指定待处理的文本文件列表。
sed命令
**a\** 在当前行下面插入文本。**i\** 在当前行上面插入文本。**c\** 把选定的行改为新的文本。**d** 删除,删除选择的行。**D** 删除模板块的第一行。**s** 替换指定字符**h** 拷贝模板块的内容到内存中的缓冲区。**H** 追加模板块的内容到内存中的缓冲区。**g** 获得内存缓冲区的内容,并替代当前模板块中的文本。**G** 获得内存缓冲区的内容,并追加到当前模板块文本的后面。**l** 列表不能打印字符的清单。**n** 读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。**N** 追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码。**p** 打印模板块的行。**P** (大写) 打印模板块的第一行。**q** 退出Sed。**b lable** 分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾。**r file** 从file中读行。**t label** if分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。**T label** 错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。**w file** 写并追加模板块到file末尾。 **W file** 写并追加模板块的第一行到file末尾。 **!** 表示后面的命令对所有没有被选定的行发生作用。 **=** 打印当前行号码。
sort
将文件进行排序并输出
补充说明
sort命令 是在Linux里非常有用,它将文件进行排序,并将排序结果标准输出。sort命令既可以从特定的文件,也可以从stdin中获取输入。
语法
sort(选项)(参数)
选项
- -b:忽略每行前面开始出的空格字符;
- -c:检查文件是否已经按照顺序排序;
- -d:排序时,处理英文字母、数字及空格字符外,忽略其他的字符;
- -f:排序时,将小写字母视为大写字母;
- -i:排序时,除了040至176之间的ASCII字符外,忽略其他的字符;
- -m:将几个排序号的文件进行合并;
- -M:将前面3个字母依照月份的缩写进行排序;
- -n:依照数值的大小排序;
- -o<输出文件>:将排序后的结果存入制定的文件;
- -r:以相反的顺序来排序;
- -t<分隔字符>:指定排序时所用的栏位分隔字符;
- +<起始栏位>-<结束栏位>:以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
参数
文件:指定待排序的文件列表。
实例
sort将文件/文本的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。
tr
将字符进行替换压缩和删除
补充说明
tr命令 可以对来自标准输入的字符进行替换、压缩和删除。它可以将一组字符变成另一组字符,经常用来编写优美的单行命令,作用很强大。
语法
tr(选项)(参数)
选项
- -c或——complerment:取代所有不属于第一字符集的字符;
- -d或——delete:删除所有属于第一字符集的字符;
- -s或–squeeze-repeats:把连续重复的字符以单独一个字符表示;
- -t或–truncate-set1:先删除第一字符集较第二字符集多出的字符。
参数
字符集1:指定要转换或删除的原字符集。当执行转换操作时,必须使用参数“字符集2”指定转换的目标字符集。但执行删除操作时,不需要参数“字符集2”;
字符集2:指定要转换成的目标字符集。
实例
将输入字符由大写转换为小写:
echo "HELLO WORLD" | tr 'A-Z' 'a-z'
hello world
‘A-Z’ 和 ‘a-z’都是集合,集合是可以自己制定的,例如:‘ABD-}’、‘bB.,’、‘a-de-h’、‘a-c0-9’都属于集合,集合里可以使用’\n’、‘\t’,可以可以使用其他ASCII字符。
使用tr删除字符:
echo "hello 123 world 456" | tr -d '0-9'
hello world
将制表符转换为空格:
cat text | tr '\t' ' '
字符集补集,从输入文本中将不在补集中的所有字符删除:
echo aa.,a 1 b
uniq
报告或忽略文件中的重复行
补充说明
uniq命令 用于报告或忽略文件中的重复行,一般与sort命令结合使用。
语法
uniq(选项)(参数)
选项
- -c或——count:在每列旁边显示该行重复出现的次数;
- -d或–repeated:仅显示重复出现的行列;
- -f<栏位>或–skip-fields=<栏位>:忽略比较指定的栏位;
- -s<字符位置>或–skip-chars=<字符位置>:忽略比较指定的字符;
- -u或——unique:仅显示出一次的行列;
- -w<字符位置>或–check-chars=<字符位置>:指定要比较的字符。
参数
输入文件:指定要去除的重复行文件。如果不指定此项,则从标准读取数据;
输出文件:指定要去除重复行后的内容要写入的输出文件。如果不指定此选项,则将内容显示到标准输出设备(显示终端)。
实例
删除重复行:
uniq file.txt
sort file.txt | uniq
sort -u file.txt
只显示单一行:
uniq -u file.txt
sort file.txt | uniq -u
统计各行在文件中出现的次数:
sort file.txt | uniq -c
在文件中找出重复的行:
sort file.txt | uniq -d
vi
功能强大的纯文本编辑器
补充说明
vi命令 是UNIX操作系统和类UNIX操作系统中最通用的全屏幕纯文本编辑器。Linux中的vi编辑器叫vim,它是vi的增强版(vi Improved),与vi编辑器完全兼容,而且实现了很多增强功能。
vi编辑器支持编辑模式和命令模式,编辑模式下可以完成文本的编辑功能,命令模式下可以完成对文件的操作命令,要正确使用vi编辑器就必须熟练掌握着两种模式的切换。默认情况下,打开vi编辑器后自动进入命令模式。从编辑模式切换到命令模式使用“esc”键,从命令模式切换到编辑模式使用“A”、“a”、“O”、“o”、“I”、“i”键。
vi编辑器提供了丰富的内置命令,有些内置命令使用键盘组合键即可完成,有些内置命令则需要以冒号“:”开头输入。常用内置命令如下:
- Ctrl+u:向文件首翻半屏;
- Ctrl+d:向文件尾翻半屏;
- Ctrl+f:向文件尾翻一屏;
- Ctrl+b:向文件首翻一屏;
- Esc:从编辑模式切换到命令模式;
- ZZ:命令模式下保存当前文件所做的修改后退出vi;
- :行号:光标跳转到指定行的行首;
-
Linux命令教程第三期相关推荐
- linux命令教程第六期
目录 前言 磁盘维护 badblocks 补充说明 语法 选项 参数 其他 dd 补充说明 语法 选项 e2fsck 补充说明 语法 选项 参数 实例 fdisk 补充说明 语法 选项 fsck 补充 ...
- Linux命令教程第一期
目录 前言 系统设置 bind 补充说明: 选项: 语法(选项) chkconfig 补充说明: 语法选项: 语法 alis 补充说明 语法选项: 语法 选项 参数 实例 chroot 补充说明 语法 ...
- whereis php,Linux命令教程之比较搜索命令whereis与which的区别
这篇文章主要介绍了Linux命令搜索命令whereis与which的区别的相关资料,这里举例说明该如何区别他们之家的用法,需要的朋友可以参考下 Linux命令搜索命令whereis与which的区别 ...
- FocusLab新生大礼包之:一些常用的Linux命令教程
## Author:FocusLab_ZYB 首先声明一下,该博客所有的演示是基于本人所在实验室的服务器,使用CentOS7.0的多GPU工作站进行演示,这不是什么教程,仅仅是给新生的一个指南而已. ...
- Linux命令教程第二期
每天日更 文章目录 网络通讯 apachectl 补充说明 语法 参数 arpwatch 补充说明 语法 选项 ifconfig 补充说明 语法 参数 ip 补充说明 语法 选项 参数 ppp-off ...
- linux命令获取进程pid_查看所有进程PID号的linux命令 - 卡饭网
win10如何通过PID号结束进程 win10如何通过PID号结束进程 1.按CTRL+SHIFT+ESC键直接调用任务管理器 2.也可以通过按CTRL+ALT+DEL键选择[任务管理器]来调用[任务 ...
- linux 复制包括子目录_【Linux分享】Linux常用命令+教程分享
今天分享分为两部分 :)PART01 Linux常用命令分享/PART02 关于BD面试经验分享 30mins Linux Command:PART 1 你本可以张口就来.....本篇内容分享 ...
- linux裁剪图片的软件,ImageMagick教程:如何在Linux命令行中剪裁图像
问题:我想要去除图像文件中的白色空白,有没有什么便捷的方法能在Linux命令行中对图像文件进行剪裁? 当涉及到在Linux中转换或编辑图像文件时,ImageMagick毫无疑问是最为熟知的一体化软件之 ...
- linux间服务器间文件传输,Linux命令scp服务器间文件传输教程
scp就是secure copy,是用来进行远程文件拷贝的.数据传输使用 ssh,并且和ssh 使用相同的认证方式,提供相同的安全保证 .那么你知道Linux命令scp服务器间文件传输教程么?接下来是 ...
最新文章
- 数据科学中的强大思维
- 剑指offer 算法 (时间效率)
- 深入Bert实战(Pytorch)----fine-Tuning 2
- gva explaination
- 和搜狗输入法快捷键冲突_电脑输入法怎么设置成搜狗双拼?
- [软件工程] 查找二维数组最大子数组的之和 郭莉莉李亚文
- 使用Speedment 3.0.17及更高版本简化交易
- linux fb应用例子,Linux下利用framebuffer画点的程序小例子
- python闭包怎么理解_Python 闭包的理解
- java字符串常量池长度_Java String类相关知识梳理(含字符串常量池(String Pool)知识)...
- idea整个项目乱码解决办法
- vdbench多主机运行指导
- The props`strategy` cannot be null when uses class based sharding strategy
- tomcat乱码解决方案 tomcat 乱码
- [react] This synthetic event is reused for performance reasons. If you‘re seeing this, you‘re access
- 一小球从100米高度落下,每次落地后反弹原来高度的一半,问第十次落地经过的路径多长?第十次落地后反弹多高?
- 计算机主板 辐射,电磁辐射影响计算机主板的模拟计算
- 面试官常问的几个问题
- css first-child伪类选择器详解
- php mysql 聊天室_聊天室phpmysql(三)_php
热门文章
- 小人物走路、奔跑的VC++游戏特效,适合刚学习VC++游戏编程的朋友
- 怎样旋转pdf文件页面并保存
- 网速特别好但是访问网页特别慢
- Stimulsoft报表使用心得
- [CF1284G]Seollal
- 基于51单片机的数码管闹钟设计
- 【无标题】黑群辉DSM 6.2.3 系统安装图文教程 (2020-12-27更新)
- python + selenium + unittest 实现网站登录注册自动化测试
- DICOM医学影像文件解析
- App设计者开发APP要注意的21个雷区(上)
- linux命令教程第六期