设为首页 加入收藏

TOP

2.1.4 Linux编程常用命令及工具(2)
2013-10-12 06:47:05 来源: 作者: 【 】 浏览:96
Tags:2.1.4 Linux 编程 常用 命令 工具

2.1.4 Linux编程常用命令及工具(2)

5.sed文件编辑器

sed是一个功能强大的面向流的在线文本编辑器。它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间",接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕,接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非使用重定向存储输出。sed主要用来自动编辑一个或多个文件,简化对文件的反复操作以及编写转换程序等。调用sed命令有两种形式:

sed [options] 'command' file(s)
sed [options] -f scriptfile file(s)

主要参数如下。

a\:在当前行后面加入一行文本。
b lable:分支到脚本中带有标记的地方,如果标记不存在则分支到脚本的末尾。
c\:用新的文本改变本行的文本。
d:从模板块位置删除行。
D:删除模板块的第一行。
i\:在当前行上面插入文本。
h:拷贝模板块的内容到内存中的缓冲区。
H:追加模板块的内容到内存中的缓冲区
g:获得内存缓冲区的内容,并替代当前模板块中的文本。
G:获得内存缓冲区的内容,并追加到当前模板块文本的后面。
l:列表不能打印字符的清单。
n:读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。
N:追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码。
p:打印模板块的行。
P(大写):打印模板块的第一行。
q:退出Sed。
r file:从file中读行。
w file:写并追加模板块到file末尾。
W file:写并追加模板块的第一行到file末尾。
!:表示后面的命令对所有没有被选定的行发生作用。
s/re/string:用string替换正则表达式re。
=:打印当前行号码。
#:把注释扩展到下一个换行符以前。

用户可以通过定址来定位所希望编辑的行,该地址由数字构成,用逗号分隔的两个行数表示以这两行为起止的行的范围(包括行数表示的那两行)。如"1,3"表示1、2、3行,$表示最后一行。以下是部分常用的字符集。

^:锚定行的开始,如:/^sed/匹配所有以sed开头的行。
$:锚定行的结束,如:/sed$/匹配所有以sed结尾的行。
.:匹配一个非换行符的字符,如:/s.d/匹配s后接一个任意字符,然后是d。
*:匹配零或多个字符,如:/*sed/匹配所有模板是一个或多个字符后紧跟sed的行。
[]:匹配一个指定范围内的字符,如/[Ss]ed/匹配sed和Sed。
[^]:匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。
&:保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**。
\<:锚定单词的开始,如:/\\>:锚定单词的结束,如/love\>/匹配包含以love结尾的单词的行。
x\{m\}:重复字符x,m次,如:/o\{5\}/匹配包含5个o的行。
x\{m,\}:重复字符x,至少m次,如:/o\{5,\}/匹配至少有5个o的行。
x\{m,n\}:重复字符x,至少m次,不多于n次,如:/o\{5,10\}/匹配5-10个o的行。

下面给出了部分实例:

(1)sed '2d' example:删除example文件的第二行。
(2)sed '2,$d' example:删除example文件从第二行到末尾的所有行。
(3)sed '/test/'d example:删除example文件所有包含test的行。
(4)sed 's/test/mytest/g' example:在整行范围内把test替换为mytest。如果没有g标记,则只有每行第一个匹配的test被替换成mytest。
(5)sed -n 's/^test/mytest/p' example:-n选项和p标志一起使用表示只打印那些发生替换的行。也就是说,如果某一行开头的test被替换成mytest,就打印它。
(6)sed 's/^192.168.0.1/&localhost/' example:所有以192.168.0.1开头的行都会被替换成它自已加 localhost,变成192.168.0.1localhost。
(7)sed -n 's/\(love\)able/\1rs/p' example:love被标记为1,所有loveable会被替换成lovers,而且替换的行会被打印出来。
(8)sed 's#10#100#g' example:不论什么字符,紧跟着s命令的都被认为是新的分隔符,所以,"#"在这里是分隔符,代替了默认的"/"分隔符。表示把所有10替换成100。
(9)sed -n '/test/,/check/p' example:所有在模板test和check所确定的范围内的行都被打印。
(10)sed -n '5,/^test/p' example:打印从第5行开始到第一个以test开始的行之间的所有行。
(11)sed -e '1,5d' -e 's/test/check/' example:-e选项允许在同一行里执行多条命令。如例子所示,第一条命令删除1至5行,第二条命令用check替换test。命令的执行顺序对结果有影响。如果两个命令都是替换命令,那么第一个替换命令将影响第二个替换命令的结果。
(12)sed --expression='s/test/check/' --expression='/love/d' example:一个比-e更好的命令是--expression。它能给sed表达式赋值。
(13)sed '/test/r file' example:file里的内容被读进来,显示在与test匹配的行后面,如果匹配多行,则file的内容将显示在所有匹配行的下面。
(14)sed -n '/test/w file' example:在example中所有包含test的行都被写入file里。
(15)sed '/^test/a\\--->this is a example' example<:'this is a example'被追加到以test开头的行后面,sed要求命令a后面有反斜杠。
(16)sed '/test/{ n; s/aa/bb/; }' example:如果test被匹配,则移动到匹配行的下一行,将这一行的aa替换为bb,并打印该行,然后继续。
(17)sed '1,10y/abcde/ABCDE/' example:把1-10行内所有abcde转变为大写,注意,正则表达式元字符不能使用这个命令。
(18)sed '10q' example:打印完第10行后,退出sed。
(19)sed -e '/test/h' -e '$G example:在sed处理文件的时候,每一行都被保存在一个叫模式空间的临时缓冲区中,除非行被删除或者输出被取消,否则所有被处理的行都将打印在屏幕上。接着模式空间被清空,并存入新的一行等待处理。在这个例子里,匹配test的行被找到后,将存入模式空间,h命令将其复制并存入一个称为保持缓存区的特殊缓冲区内。第二条语句的意思是,当到达最后一行后,G命令取出保持缓冲区的行,然后把它放回模式空间中,且追加到现在已经存在于模式空间中的行的末尾。在这个例子中就是追加到最后一行。简单来说,任何包含test的行都被复制并追加到该文件的末尾。
(20)sed -e '/test/h' -e '/check/x' example:互换模式空间和保持缓冲区的内容,也就是把包含test与check的行互换。

6.sort命令

sort按字母次序打印命令行上指定的文件内容,也接受用管道传送的输入。sort命令可以被认为是一个非常强大的数据管理工具,用来管理内容类似数据库记录的文件。

sort命令将逐行对文件中的内容进行排序,如果两行的首字符相同,该命令将继续比较这两行的下一字符,如果还相同,将继续进行比较。其语法结构如下:

sort [选项] 文件

sort排序是根据从输入行抽取的一个或多个关键字进行比较来完成的。排序关键字定义了用来排序的字符序列。缺省情况下以整行为关键字,按ASCII字符顺序进行排序。

(1)改变缺省设置的选项如下所示。

-m:若给定文件已排序,则合并文件。
-c:检查给定文件是否已排好序,如果没有排序,则打印出错信息,并以状态值1退出。
-u:对排序后认为相同的行只保留其中一行。
-o 输出文件:将排序输出写到输出文件中而不是标准输出,如果输出文件是输入文件之一,sort先将该文件的内容写入一个临时文件,然后再排序、写输出结果。

(2)改变缺省排序规则的选项如下所示。

-d:按字典顺序排序,比较时仅字母、数字、空格和制表符有意义。
-f:将小写字母与大写字母同等对待。
-I:忽略非打印字符。
-M:作为月份比较,如"JAN"<"FEB"<1/4<"DEC"。
-r:按逆序输出排序结果。
+posl-pos2:指定一个或几个字段作为排序关键字,字段位置从posl开始,到pos2为止(包括posl,不包括pos2)。如不指定pos2,则关键字为从posl到行尾。字段和字符的位置从0开始。例如以第2个字段作为排序关键字对文件example的内容进行排序的命令如下。

[root@localhost ~]# sort +1-2 example
-b:在每行中寻找排序关键字时忽略前导的空白(空格和制表符)。
-t:separator指定字符separator作为字段分隔符。

7.其他有用的命令

(1)nl为输入的每一行添加行号。

[root@localhost ~]# nl /etc/xinetd.d/cvs 
1 # default: off
2 # description: The CVS service can record
the history of your source \
3 # files. CVS stores
all the versions of a file in a single \
4 # file in a clever
way that only stores the differences \
……

(2)wc打印指定文件或输入流(来自管道)中的行、字和字节的数量。

(3)head打印文件或流的前10行。使用-n选项来指定应显示的行数。

(4)tail打印文件或流的最后10行。使用-n选项来指定应显示的行数。

(5)tac与cat类似,但它以逆向顺序打印所有行,即先打印最后一行。

(6)paste获取2个或更多文件作为输入,连接输入文件上的每个后续行,并输出结果行。它对于创建文本的表或列是很有用的。

(7)od将输入流转换为八进制或十六进制的"转储"格式。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇2.1.4 Linux编程常用命令及工具.. 下一篇3.1.4 as86和ld86使用方法和选项

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: