TechToy

follow your principle

[转]linux-编辑器-vi-emacs-grep-gawk-sed等

| Comments

第1章:vi(vim) -visual editor (improve)

启动vi(vim)
vi/vim filename:从filename第一行开始编辑,即光标默认停留在文件第一行第一个字符处;
+n filename:从第n行开始编辑;
+ filename:从最后一行开始编辑;
+/pattern filename:从第一个包含字符串“pattern”的行开始编辑。
-r filename:在系统崩溃后恢复filename;
-R filename:以只读方式编辑filename,等同于命令view filename。

vi的三种工作模式:命令模式(也称普通模式)、插入模式与末行模式(命令模式下输入:后进入)。

命令模式下的命令

i:在当前光标插入文本;
I:在所在行行首插入文本;
a:在当前光标后添加文本;
A:在当前行尾添加文本;

k、方向键上:光标上移;
j、方向键下:光标下移;
-:光标到上一行的行首;
+:光标到下一行的行首;
h、Backspace、方向键左:光标左移;
l、Space、方向键右:光标右移;
0、^:光标到行首;
$:光标到行尾;
w:光标移到下一单词,标点符号视为单独一个单词;
W:与w相似,标点符号视为单词的一部分,以空格为分隔;
b:光标移到上一个单词;
B:与b相似,只以空格为间隔,无视标点符号;
e:光标移到当前单词末;
E:与e相似,无视标点符号;
(:光标移到上一个句子的开始;
):光标移到下一个句子的开始;
{:光标移到上一段落的开始;
}:光标移到下一段落的开始;
H:光标移到屏幕顶部第一行的最左端;
M:光标移到屏幕中间;
L:光标移到屏幕的尾部。

x、dl:删除当前字符;
X:删除当前光标左侧字符;
d0:从行的开始处删除;
D、d$:删除到行的末尾;
d^:从行开始的第1个字符开始删除(不包括空格和TAB);
dw:删除到单词的末尾;
d5w:删除到第5个单词的末尾;
dtc:删除到当前行字符c的下一次出现;
dfc:删除到当前行字符c的下一次出现(包括c);
d/word:删除到单词word的下一次出现;
d3{:从前面的第3段删除到当前位置;
d{:从本段的开始位置删除到当前位置;
db:从单词的开始处删除;
dW:删除到以空白为分隔的单词的末尾;
dB:从以空白为分隔的单词的首字符开始删除;
d5B:从以空白为分隔的前面第5个单词的首字符开始删除;
d):删除到句子的末尾;
d4):删除到第4个句子的末尾;
d}:删除到段落末尾;
d4}:删除到后面的第4段末尾;
dd:删除一行;
3dd:删除当前行开始的3行;
dL:删除到当前屏幕的最后一行(包括最后一行);
dH:从当前屏幕的第一行开始删除。

C:删除到行的末尾,并进入插入模式。
cxx:删除指定的内容并进入插入模式。xx后缀与d命令的后缀相同。

~:更改大小写;
3~:从当前字符开始更改3个字符的大小写;

s:用一个或多个字符替换当前光标位置处的字符;
S:用一个或多个字符替换当前行;
10s:用一个或多个字符替换当前字符开始的10个字符;

J:把当前行的末尾与下一行连接起来并以一个空格分隔,如果当前行以句点“.”结尾,则两行之间插入两个空格;

.:句点命令,重复执行最近一次的修改命令。

u:撤销上一次的编辑操作;
U:撤销对当前行的所有修改,将文本恢复到启动修改之前的状态
Ctrl+R:重复命令,即redo。

f:从当前光标开始查找指定的字符,并将光标移动到该字符出现的位置,可以d、c合用;
3fq:光标移到本行第三个字符q所在位置;
F:从本行开始位置到当前光标所在位置之间查找字符。

行号+G:定位到指定的行,若不指定行号,则默认定位到最后一行。

y:复制到通用缓冲区,与移动命令合用,如y2l,与d、c后缀相同。yy复制一行,3yy复制3行;
Y:等同于yy。

p:把通用缓冲区的内容粘贴到当前位置,删除命令或复制命令都会把文本存入通用缓冲区中;
P:把通用缓冲区的内容粘贴到当前字符之前。

Ctrl+G:显示文件状态。

ZZ:保存并退出。

/+字符串:查找字符串;
n:向后重复上一次搜索;
N:向前重复上次搜索。

Ctrl+w+s:水平拆分窗口;
Ctrl+w+n:打开新窗口编辑一个空文件;
Ctrl+w+w:实现在多个窗口之间的切换。

Ctrl+L:重绘屏幕。

Ctrl+y:向上滚一行;
Ctrl+e:向下滚一行;
Ctrl+u:向上滚动半屏;
Ctrl+d:向下滚动半屏;
Ctrl+b:向上滚动整屏;
Ctrl+f:向下滚动整屏。

末行模式下的命令

: [address] r [filename]:把文件内容插入到当前缓冲区,address可以是行号,未指定行号时默认插入到当前光标所在行的下方,未指定文件名时默认再次读入当前文件;
: [address] w [filename]:把缓冲区的部分或全部内容写入到磁盘,例::3,8 w temp把3~8行的内容写加到temp文件里。:4,10 w >> temp把4~10行内容追加到temp文件里;

:f:显示文件状态,等同于命令模式下的Ctrl+G。

:undo:撤消命令,等同于命令模式下的u;
:redo:重复命令,等同于命令模式下的Ctrl+R。

:w:保存缓冲区的内容,但不退出;
:w filename:另存为;
:q:退出;
:wq:保存并退出;
:q!:不保存而退出。

:set noincsearch:设置普通查找,当输入/+字符串并按回车键开始查找;
:set incsearch:设置增量查找,每输入一个字符vi便高亮显示匹配的位置。

:[g] [address] s/search/replacement [/option]:替换字符串。g表示对所有匹配结果进行替换,否则只对第一次查找结果进行替换。address表示查找的范围,不指定则只搜索当前行。

:split:窗口水平拆分,可以多次拆分;
:split filename:水平拆分窗口,并在新窗口中载入指定文件;
:vsplit:窗口垂直拆分;
:vsplit filename:垂直拆分窗口,并载入指定文件。
:only:关闭除当前窗口之外的窗口;
:q:关闭当前窗口;
:qall:关闭所有窗口。

:sh:启动一个Shell,在该Shell里输入exit或Ctrl+d退出Shell回到vi;
:!command:执行外部命令。

:'标记:字符“'”,标记当前行,例::'t把该行标记成t;(博主用该命令时得到错误“E20 没有设定标记”。)
:`标记:字符“`”,使用标记,例如标记t存在时,命令:d't删除该行。

:help:获得帮助。

第2章:emacs -editing macros,宏编辑器

emacs是一个屏幕编辑器,与vim相比,vim更适合于完成小型任务,如邮件的快速回复、系统配置的简单修改等,而emacs更适合于处理复杂 事务,如同时修改多个文件、调用其他程序等。与vim不同,emacs不需要在插入模式和命令模式间进行切换,所以emacs被称为无模式编辑器。 emacs与vim最大的区别是emacs允许用户使用Lisp编写新命令或者原来的命令。

在图形环境中,输入emacs命令进入图形界面。在命令行环境中,或输入命令emacs -nw -q filename进入文本模式。-nw表示不使用X接口,-q表示不从用户的主目录下读取“~/.emacs”或“default.el”初始化文件,而 使用标准的、未定制的emacs。不带参数的emacs进入帮助界面。

窗口底部反白显示的文本条,被称为模式行(mode line)。模式行显示的信息包括:文件修改指示符、当前文件名称、模式说明、当前光标位置指示符、缓冲区位置。
文件修改指示符是靠近最左边的两个星号字符。星号表示文件被修改,否则不显示星号而显示连字符。
缓冲区位置给出了当前窗口距离缓冲区底部的距离。可为“All”、“Top”、“Bot”或百分比。

屏幕的底部有一个单独的行,被称为回显区(echo area)或小缓冲区(mini buffer),也称状态行,用来显示较短的消息或特殊的单行命令。

Ctrl+X Ctrl+C:退出。
Ctrl+X Ctrl+s:保存文件。

Ctrl+F、右方向键:光标向前;
Ctrl+B、左方向键:光标向后;
Alt+f:光标向前移动一个字;
Alt+b:光标向后移动一个字;
Ctrl+A:光标移到行首;
Ctrl+E:光标移到行尾;
Ctrl+P、上方向键:光标上移一行;
Ctrl+N、下方向键:光标下移一行;
Alt+a:光标移到句子的开始处;
Alt+e:光标移到句子的末尾;
Alt+{:光标移到段落开始处;
Alt+}:光标移到段落末尾;
Alt+r:光标移到窗口中间一行的开始处。

Ctrl+U:重复执行命令,如Ctrl+U 7 Ctrl+B向左移动7个字符。

Ctrl+D、DEL键:删除光标所在字符。
Backspace:删除光标左边字符。

Ctrl+X 2:水平拆分窗口;
Ctrl+X 3:垂直拆分窗口;
Ctrl+X b:切换到指定的缓冲区。

Ctrl+V、PageDown键:向前滚动一屏;
Alt+V、PageUP键:向后滚动一屏;
Ctrl+L:重绘屏幕。

第3章:grep-Global search Regular Expression and Print out the line

grep是一个最初用于UNIX操作系统的命令行工具。在给出文件列表或标准输入后,grep会对匹配一个或多个正则表达式的文本进行搜索,并只输出匹配的文本。语法为:grep [选项] 字符模式 [文件名1,文件名2]。不输入文件名则从标准输入读取内容。

grep使用正则表达式元字符基本集,包括:
^:匹配行首;
$:匹配行尾;
.:匹配任意字符;
*:匹配0个或多个任意字符;
[]:匹配指定范围内的其中一个字符;
[^]:匹配不在指定范围内的字符;
\<:匹配单词首。(在linux终端上敲命令时,需要多使用一个反斜杠,如:grep abcd\< filename,因为第一个反斜杠用于转义一个shell的反斜杠。)
\>:匹配单词末。
\{m\}:匹配前一字符的m次出现。
\{m,\}:匹配前一字符的至少m次出现。
\{m,n\}:匹配前一字符至少m次,至多n次出现。

grep的选项包括:
-#:同时显示匹配行上下的#行,#表示数字;
-b:在每行前打印字符偏移量;
-c:只打印匹配的行数,不显示匹配的内容;
-f FILE:从FILE文件中提取模式;
-h:当搜索多个文件时,不显示匹配文件名前缀;
-i:忽略大小写;
-q:取消显示,只返回退出状态,0表示找到了匹配的行;
-l:打印匹配模式的文件清单;
-L:打印不匹配模式的文件清单;
-n:在匹配的行前面打印行号;
-s:不显示关于不存在或无法读取文件的错误信息;
-v:反检索,只显示不匹配的行;
-w:如果被\<和\>引用,就把表达式作为一个单词搜索;
-V:显示软件版本信息。

grep的退出状态存储在$?里,通过ehco $?可以查看,搜索成功值为0,搜索不成功值为1,文件不存在则返回2。

egrep(extend grep)命令与grep相似,执行效率比grep高,但需要占用较大内存空间。egrep使用正则表达式元字符的扩展集,包括:
+:匹配一个或多个前一字符;
?:匹配一个或0个前一字符;
a|b|c:匹配a或b或c。
():分组符号;
x{m}、x{m,}、x{m,n}:作用同x\{m\}、x\{m,\}、x\{m,n\}。

grep -E打开对元字符扩展集的支持,实现与egrep相同的功能。

fgrep:与grep相似,占用空间比egrep小,速度比grep快,但不识别正则表达式。

第4章:gawk与sed

awk是模式扫描和处理语言,又称过滤器,是Linux/Unix下用来操纵数据和产生报告的程序语言。其处理的数据可以来自标准输入、一个或多个文件、或者其他命令的输出。

awk写于1977年,其名称取自其作者姓氏的第一个字母,分别是Alfred V Aho, Peter J. Weinberger和Brian W Kernighan。在1985年的升级版中加入了用户自定义函数、动态正则表达式和处理输入文件等功能,使得awk可以处理大型程序。awk有多个版 本,包括旧版awk、nawk(new awk,新版本)、gawk(GNU版本)以及POSIX awk等。很多Linux系统将/bin/awk链接至/bin/gawk。

gawk程序由包含模式和动作的单行或多行文本组成,格式如下:
pattern {action}
模式用来从输入中选取文本行,对于匹配的每行文本,gawk都执行fcwt(action)来处理。

模式用斜杠包装,如:gawk /word/ filename查找所有包含word的行。这里没有指定action,默认为print。

“~”用于测试一行中某段是否匹配模式。一行中可以有多个“段”,各“段”之间由空白符号分隔,如section1 secion2 section3。gwak '$1~/word/' filename在文件中查找第一段匹配word的各行。“!~”用于测试不匹配,如gawk '$2!~/word/' filename。

BEGIN和END是两个独特的模式,分别是在gawk开始处理之前和处理完毕之后要执行的命令。在处理所有输出之前,gawk执行BEGIN模式 关联的动作,在处理完之后执行END模式关联的动作。例:gawk 'BEGIN{print "This is the beginning"} {print}' filename。又例: gawk 'BEGIN {print "head"; count=0} {print; count++} END {printf "end: %d", count}' filename。

逗号“,”可以分隔两个模式,作为范围运算符。例:gawk '/abcd/,/efgh/' filename 输出第一行匹配abcd而最后一行匹配efgh的多行。

{print}是默认的动作,不带参数时则输出记录(通常是一行)。参数可以是变量或字符串常量。还可以指定输出到文件,如>(覆 盖)、>>(追加)、|(管道)和|&(协进程,双向管道)。例:{print > "somefile"}。多个动作用分号“;”隔开。

“#”开头的程序行表示注释。

gawk不需要声明可以直接使用变量。未赋初始值的变量自动初始化为0或空字符串。除了用户变量(user variable)外,gawk还维护了程序变量(program variable):
$0:当前记录(作为单个变量);
$1-$n:当前记录的字段;
FILENAME:当前输入文件名(null表示标准输入);
FS:输入字段的分隔符;
NF:当前记录的字段数目;
NR:当前记录的记录编号,每处理完一个记录,NR的值就自动加1;
OFS:输出字段分隔符(默认为空格符);
ORS:输出记录分隔符(默认为换行符);
RS:输入记录分隔符(默认为换行符);

除了在程序中初始化变量外,还可以在命令行上用“–assign”或“-v”选项初始化变量。如:awk -v A=1 '{print A}' filename。

gawk把输入文件看作是一个具有一定格式的记录集合,通常一行为一个记录,每个记录被空格分隔成多个字段。-F选项可以指定字段分隔符, 如:awk -F: '{print $2}' filename指定分隔符为冒号“:”。而awk -F[:-] ‘{print $2}' filename指定分隔符为冒号“:”或者连字符“-”,即记录1:2-3被视为1、2、3三个字段。输入段分隔符也可以在模式中指定:awk 'BEGIN{FS="[:-]"} {print $2}' filename。

{print $2 $3}会把两个变量合并输出,例如,$2为"a",$3为"b",则前述动作输出“ab”,{print $2,$3}输出"a b"。输出段分隔符可以在BEGIN模式中指定:awk BEGIN{OFS=":"} {print $2}' filename。

gawk支持函数,自带的函数有:
length(str):返回str的字符个数。不带参数则返回当前记录的字符个数。
int(num):返回num的整数部分。
index(str1,str2):str2在str1中的位置,如果不在则返回0。
split(str,arr,del):用del作定界符,将str的元素放置到数组arr[1]…arr[n]中,返回数组元素个数。
sprintf(fmt,args):根据fmt格式化args并返回格式化后的字符串,模仿C编程语言中相应的同名函数。
substr(str,pos,len):返回str中从pos开始长度为len个字符的字符串。
tolower(str):返回str的副本,所有大写字母被转换成小写。
toupper(str):返回str的副本,所有小写字母被转换成大写。

gawk支持关联数组,即array[string]=value。关联数组可以用for来遍历。例:awk '{array[$1]=$2} END{for (elem in array) print elem}' filename。

printf用于格式化输出,语法为:%[-][x[.y]]cov。“-”表示左对齐,“x”表示最小字段宽度,“y”表示数字中小数点右边的位数。“conv”指示数值转换的类型,包括:
d:十进制;
e:指数表示;
f:浮点数字;
g:使用f或e中较短的那个;
o:无符号八进制;
s:字符串;
x:无符号十六进制。

gawk支持关系运算符,包括<、>、<=、>=、==、!=。布尔结果可以用布尔运算符“&&”和 “||”来运算。算术运算符支持“+”、“-”、“*”、“/”、“=”、“%”、“++”、“–”、“+=”、“-=”、“*=”、“/=”和 “%=”。与C基本一样。

流程控制有if…else,while,for,break和continue。

getline可以用来读取文件中的一行。如awk 'BEGIN {getline myline; print myline}' myfile只输出文件的第一行,可以用循环来控制读取的行数。

awk程序可以写在一个文件里作为脚本文件,再用-f选项指定。例:awk -f myscript filename。

协进程(coprocess)是指与另一个进程并行运行的进程。gawk从版本3.1开始可以通过协进程方式直接与某个后台进程进行信息交换。协进程可用于客户端/服务器环境中(例如构建SQL前端与后端),或者通过网络与远程系统交换数据。例如,下面这个awk脚本:
BEGIN {
    count = 0;
    while (getline myline) {
        print myline |& "./coprocess";
        "./coprocess" |& getline LINE;
        print LINE;
    }
}
它将与同一目录一下的可执行文件coprocess进行协作。下面是coprocess文件的内容:
#!/bin/bash
while read LINE
do
    echo "tommy" $LINE
done
之后运行命令:gawk -f myscript filename,则在filename中的每行前加上“tommy”再输出到标准输出。

在协进程的基础上,gawk还可以通过网络交换数据。gawk可以通过IP网络连接到另一个系统上的某个进程进行信息交换。当用户使用“/inet/”开头的特殊文件名时,gawk将使用网络连接来处理用户的请求。以“inet”开头的特殊文件的格式如下:
/inet/protocol/local-port/remote-host/remote-port
其中“protocol”通常是TCP,也可以是UDP。“local-port”表示本地端口,0表示让gawk自动选择一个端口。“remote- host”表示远端主机的地址,“remote-port”表示远端端口号,可以指定为http或ftp地址。比如下面的代码:
BEGIN {
    server = "/inet/tcp/0/www.google.com/80";
    print "start to connect..";
    print "GET /index.html\r\n" |& server;
    print "request sent."
    while (server |& getline)
        print $0;
    print "done."
}

sed(stream editor,流编辑器)是一个批处理(非交互式)编辑器,可以实现在vi和ex里一样的编辑任务。sed相当小巧,可以利用管道对标准输入/输出的数据 进行编辑和组合。sed可以对来自文件或标准输入流进行转换,通常被用作管道中的过滤器。由于sed仅仅对其输入进行一遍扫描,因此比其他交互编辑器(如 ed)更加高效。

sed一次处理一行文本并把处理结果输出送往标准输出设备(屏幕)。sed把当前处理的行存储在模式空间(pattern space)的临时缓冲区中。一旦sed完成对模式空间中行的处理(也就是执行完这一行中的sed命令),模式空间中的行就被送往屏幕(除非命令是删除行 或者打印到打印机)。行被处理完成以后,就被移出模式空间,程序接着读入下一行,处理、显示、移出……文件输入的最后一行被处理完成以后,sed结束。通 过在临时缓冲区存储每一行,然后在缓冲区中操作该行,保证了原始文件不会被破坏。

sed命令行的语法格式为:
sed [-n] program [file-list]
sed [-n] -f program-file [file-list]
其中“program”表示命令行中的sed程序,“program-file”表示一个sed程序文件。“file-list”表示sed将要处理的普通数据文件。“-n”选项阻止sed将选定的行复制到标准输出上。

sed程序由符合如下语法的一行或多行命令构成:
[address][, address] instruction [argument-list]

其中“address”是可选的,如果省略则对输入的所有行进行处理。地址可以以行号、正则表达式或二者结合的方式表示。比如sed -n '3,/abcd/ p' filename输出第3行到匹配“abcd”的那行。其中“p”是打印指令。“$”表示最后一行。

指令包括:
d:删除指令(delete)。导致sed不输出被选择的行,并且不继续完成对该行的后续处理过程。
n:下一条指令(next)。输出当前选择的行(如果可以),然后从输入中读入下一行,并且从program或program-file中的下一条指令开始对新读入的行进行处理。
a:追加指令(append)。在当前选择的行之后插入一行或多行文本。如果在a指令前有两个地址,那么它将在选定的每一行之后添加文本。如果a指令前没有地址,它将在每行之后添加文本。
i:插入指令(insert)。与a指令同,只不过是将文本添加到选定的行之前。
c:修改指令(change)。与a和i指令类似,不同的是它将选定的行修改为新的文本。如果指定的是一个地址范围,c指令将整个范围内的行替换成新文本。
s:替换指令(subsitute)。与vim中的替换指令类似。语法为s/pattern/replacement/[g][p][w file]。g为global,替换所有匹配;p为print,打印替换过的行;w为写入文件。
p:打印指令(print)。将选定的行写入标准输出。
w file:写指令(write)。把选定的行写入文件。
r file:读指令(read)。从文件中读出内容并添加到选定的行之后。
q:退出指令(quit)。立即结束sed。

sed具有一此控制结构,可以控制程序的流程走向。常用的控制结构有:
!:取反操作,使得sed后面与其同一行的指令作用于没有该指令选择的每一行地址上。例如,“3!d”将删除除第3行外的所有行,而“$!p”将显示除最后一行外的所有行。
{}:将一组指令括起来,用于定义指令组。该组指令将作用于它前面的地址所选定的行,使用分号可将一行中的多条指令分隔开。
分支指令:sed不适合使用分支指令,如果需要,建议使用awk或Perl来编写程序。
:label:标识sed程序中的一个位置,适用于分支指令b或t
b [label]:无条件转移到label标识的命令。如果没有指出分支目标label,则跳过当前行中剩下的指令并从输入中读取下一行。
t [label]:如果从输入中读取的行使得s指令匹配成功,则转移到label标识的命令。如果没有指出分支目标label,则跳过当前行中剩下的指令并从输入中读取下一行。

sed有两个缓冲区:Pattern区和Hold区。Pattern区中保存着sed从输入中读取的行,所有的命令都工作在Pattern区上。Hold区作为临时缓冲区,可以用来暂存数据。Pattern区和Hold区之间进行数据传送的指令有:
g:将Hold区中的内容复制到Pattern区中。Pattern区中原来的内容将会丢失。
G:将一个换行符和Hold区中的内容追加到Pattern区中的内容之后。
h:将Pattern区中的内容复制到Hold区中。Hold区中原来的内容将会丢失。
H:将一个换行符和Pattern区的内容附加到Hold区中的内容之后。
x:交换Pattern区和Hold区中的内容。

第5章:其它常用的文本编辑命令

aspell:检查文件的拼写错误。例:aspell -c file检查文件的拼写错误,并进入交互模式。-c为check,指定文件。aspell -l从标准输入产生一个拼写错误的单词列表。aspell dump master输出使用的检错词典。aspell还有一个兼容的ispell命令,功能及用法与aspell相似,但不包含一些选项。

cat:显示文本内容。cat是Concatenate的缩写。-b对非空行输出行编号;-E在每行结束处显示$;-n对输出的所有行编号;-S不输出多行空行;-T:将制表符Tab显示为^I;-v显示非打印内容。-A等价于-vET;-e等价于-vE;-t等价于-vT。
-v选项的英文解释:Non-printing characters (with the exception of tabs, new-lines and form-feeds) are printed visibly.ASCII control characters (octal 000 - 037) are printed as ^n, where n is the corresponding ASCII character in the range octal 100 - 137 (@, A, B, C, …, X, Y, Z, [, \, ], ^, and _); the DEL character (octal 0177) is printed ^?. Other non-printable characters are printed as M-x, where x is the ASCII character specified by the low order seven bits。

cmp:比较文件差异。例:cmp file1 file2。-l显示字节序号(十进制)和字节差异(八进制)。-i SKIP:路过起始输入的SKIP个字节。-i SKIP1:SKIP2:跳过文件1的SKIP1字节、文件2的SKIP2字节。-s不显示差异信息,仅返回状态值,0表示文件相同,1表示不 同,>1表示存在错误。-n LIMIT比较至多LIMIT个字节。-b显示差异字节。

csplit:按指定行数分割文件。例:csplit file 50把前50行分割成一个文件,其余部分成为另一个文件。

cut:从文件选择指定的内容,并输出到标准输出。cut -c 2 file输出每行第2个字符。-c1-10输出每行第1~第10个字符。-b1输出每行的第一个字节。

col:过滤控制字符。-b过滤BACKSPACE;-x:将TAB替换为多个空格。

colrm:删除指定的列。例:colrm 2 5 < file删除第2到第5列。

comm:对已排序文件逐行进行比较。输出结果由3列组成,第1列表示仅在第1个文件中出现的行,第2列表示仅在第2个文件出现的行,第3列表示在2个文件中都存在的行。sort file > sorted_file用来给文件排序。

diff:比较文本文件。例:diff file1 file2。-y输出时使用对比格式,即输出两列;-b忽略空格;-B忽略空白行;-i忽略大小写。-u:输出统一文件的行数;-r:当两个都是目录时, 递归比较子目录。-N:在比较目录时,如果一个文件只出现在第一个目录中,则认为它在另一个目录中了以下也出现,且为空。diff -ruN file1 file2 > file.diff生成差异文件,之后可用patch命令进行打补丁:patch -p1 <file.diff。

diffstat:读取diff命令的输出,显示统计信息。例:diff file1 file2 | diffstat。

ed:行文本编辑器。

fmt:编排文本文件。重排指定文件的每一个段落,并输出到标准输出设备。例:fmt file。

gedit:gnome的文本编辑器。

head:从开始显示指定行。例:head -5 file。

indent:调整C原始代码文件格式。

jed:编辑文本文件。

joe:编辑文本文件。功能强大的ASCII文本编辑器,操作比较复杂,但功能很强大。可以模拟多种工作环境。如WordStar、Emacs、Pico和简约版joe。

join:基于相同字段连接两个文件。例如,文本a的内容为:
1 aa
2 bb
3 cc
文件b的内容为:
1 oo
2 pp
4 qq
则join a b的结果为:
1 aa oo
2 bb pp。
而join b a的结果为:
1 oo aa
2 pp bb

less:前后翻阅文本内容。-m显示百分比;-M显示百分比、行号及总行数;-N在每行前输出行号;-S合并 连续空白行;-i搜索时忽略大小写,搜索串中包含大写字母除外;-I搜索时忽略大小写,搜索串中包含小写字母除外。打开less后进入类似于vi末行模式 的界面。可使用命令:
回车键:向下移动一行
y:向上移动一行
空格:向下滚动一屏
b:向上滚动一屏
d:向下滚动半屏
u:向上滚动半屏
h:less的帮助
g:跳到第1行
G:跳到最后1行
数字%:跳到百分比处;
数字w:向上滚动数行;
数字回车:向下滚动数行;
/pattern:查找
n:继续查找。
q:退出
v:调用vi编辑器。
!command:调用shell命令。

more:分屏显示文本内容。+n从第n行开始显示;-n定义屏幕大小为n行;+/pattern从pattern前两行开始显示;-c从顶部清屏,然后显示;-s合并多个空白行;-u去除文件内容里的下划线。more启动后进入交互界面,可使用命令:
Enter:向下n行,需要定义,默认为1行;
Ctrl+F:向下滚动一屏;
空格键:向上滚动一屏;
Ctrl+B:返回上一屏;
=:输出当前的行号;
:f:输出文件名和当前行的行号;
V:调用vi编辑器;
!command:调用shell命令;
q:退出。

od:输出文件内容。以八进制或其他格式显示。od file以八进制显示;od -t c file以字符方式显示;-t a以ASCII码的形式显示;-t d以十进制方式显示;-t f以浮点数形式显示;-x以十六进制形式显示。

pr:编排文件格式。pt file为文件加上一个表头。pt -3 file分三栏显示文件。

patch:修补文件。例:diff a b > ab.diff。patch a < ab.diff可以使a的内容与b一致。

pico:编辑文字文件。

sort:文件排序。-d按字典序排序;-g按数字排序;-c检查是否已排过序;-f把小写字母看作大写字母;-n按照数值排序;-r逆序排列;-o将结果输出到文件;-t指定分隔符;+指定排序的起始比较位置。

spell:简单的拼写检查程序。

tail:显示文件的末尾部分。例:tail -2 file显示文件最后2行。tail +11 file从文件第11行开始显示直到文件结束。

tac:反序输出文件。cat的反序排列。从最后一行输出到第一行。

tee:读取标准输入到标准输出或文件。

tr:转换文件中的字符。把从标准输入读入的字符串转换为指定的字符串,然后输出到标准输出设备。如:cat abc.doc | tr a-z A-Z把文件中的小写字母转换成大写字母。

uniq:检查文件中重复出现的行。-c:每一行前,显示重复次数;-d:显示重复的行;-i:忽略大小写;-u:仅输出不重复的行。例:uniq file。

view:查看文件内容。只读方式的vi。

wc:计算文件的字数、字节数、行数。-c:显示字节数;-m:显示字符数;-l:显示新行数;-L:显示最长行的长度;-w:显示单词数。

转自csdn,原文链接

Comments