linux文件编辑修改

2018-07-06 16:10:29 buoujiang 阅读数 3123

1.col命令

Linux col命令用于过滤控制字符。

在许多UNIX说明文件里,都有RLF控制字符。当我们运用shell特殊字符">"和">>",把说明文件的内容输出成纯文本文件时,控制字符会变成乱码,col指令则能有效滤除这些控制字符。

语法

col [-bfx][-l<缓冲区列数>] 

参数

  • -b 过滤掉所有的控制字符,包括RLF和HRLF。
  • -f 滤除RLF字符,但允许将HRLF字符呈现出来。
  • -x 以多个空格字符来表示跳格字符。
  • -l<缓冲区列数> 预设的内存缓冲区有128列,您可以自行指定缓冲区的大小。

实例

下面以 man 命令帮助文档为例,讲解col 命令的使用。

将man 命令的帮助文档保存为man_help,使用-b 参数过滤所有控制字符。在终端中使用如下命令:

man man | col-b > man_help  

注:其中"|"用于建立管道,把man命令的输出结果转为col命令的输入数据。

2.colrm命令

Linux colrm命令用于滤掉指定的行。

colrm指令从标准输入设备读取书记,转而输出到标准输出设备。如果不加任何参数,则该指令不会过滤任何一行。

语法

colrm [开始行数编号<结束行数编号>]</p>

<p><b>参数说明:</b></p>
<ul>
<li>开始行数编号: 指定要删除的列的起始编号。</li>
<li>结束行数编号: 指定要删除的列的结束编号,有时候这个参数可以省略。</li>
</ul>
<h3>实例</h3>
<p>不带任何参数时该命令不会删除任何列:</p>
<pre>
colrm

按回车键后,光标将在第一行闪烁,等待标准输入,此时输入字符,如"Hello Linux!",再按回车键后第二行将出现与第一行相同内容,此时按Ctrl+C组合键可以退出。终端中显示的内容如下所示:

cmd@hdd-desktop:~$ colrm  
Hello Linux! #输入Hello Linux!字符串  
Hello Linux! #输出刚才输入的字符串Hello Linux! 

如想要删除第4 列之后的所有内容,可以使用如下命令:

colrm 4

类似于上例,此时标准输入等待输入,用户输入字符串按回车键后,将输出如下结果:

cmd@hdd-desktop:~$ colrm 4  
Hello Linux! #输入Hello Linux!字符串  
Hel #输出删除了第4列以后所有内容的字符串 

删除指定列的内容。如删除第4列到第6列的内容,可使用如下命令:

colrm 4 6 

输出的结果如下:

cmd@hdd-desktop:~$ colrm 4 6  
Hello Linux! #输入Hello Linux!字符串  
HelLinux! #输出删除了从第4列到第6列字符的字符串 

3.comm命令

Linux comm命令用于比较两个已排过序的文件。

这项指令会一列列地比较两个已排序文件的差异,并将其结果显示出来,如果没有指定任何参数,则会把结果分成3行显示:第1行仅是在第1个文件中出现过的列,第2行是仅在第2个文件中出现过的列,第3行则是在第1与第2个文件里都出现过的列。若给予的文件名称为"-",则comm指令会从标准输入设备读取数据。

语法

comm [-123][--help][--version][第1个文件][第2个文件]

参数

  • -1 不显示只在第1个文件里出现过的列。
  • -2 不显示只在第2个文件里出现过的列。
  • -3 不显示只在第1和第2个文件里出现过的列。
  • --help 在线帮助。
  • --version 显示版本信息。

实例

aaa.txt 与 bbb.txt 的文件内容如下:

[root@localhost text]# cat aaa.txt 
aaa 
bbb 
ccc 
ddd 
eee 
111 
222
[root@localhost text]# cat bbb.txt
bbb 
ccc 
aaa 
hhh 
ttt 
jjj
<p>执行 comm 命令输出结果如下:</p>
[root@localhost text]# comm aaa.txt bbb.txt 
aaa
                bbb
                ccc
        aaa
ddd
eee
111
222
        hhh
        ttt
        jjj
第一列  第二列  第三列

输出的第一列只包含在aaa.txt中出现的行,第二列包含在bbb.txt中出现的行,第三列包含在aaa.txt和bbb.txt中相同的行。各列是以制表符(\t)作为定界符。

4.csplit命令

Linux csplit命令用于分割文件。

将文件依照指定的范本样式予以切割后,分别保存成名称为xx00,xx01,xx02...的文件。若给予的文件名称为"-",则csplit指令会从标准输入设备读取数据。

语法

csplit [-kqsz][-b<输出格式>][-f<输出字首字符串>]
[-n<输出文件名位数>][--help][--version][文件][范本样式...] 

参数

  • -b<输出格式>或--suffix-format=<输出格式> 预设的输出格式其文件名称为xx00,xx01...等,您可以通过改变<输出格式>来改变输出的文件名。
  • -f<输出字首字符串>或--prefix=<输出字首字符串> 预设的输出字首字符串其文件名为xx00,xx01...等,如果你指定输出字首字符串为"hello",则输出的文件名称会变成hello00,hello01...等。
  • -k或--keep-files 保留文件,就算发生错误或中断执行,也不能删除已经输出保存的文件。
  • -n<输出文件名位数>或--digits=<输出文件名位数> 预设的输出文件名位数其文件名称为xx00,xx01...等,如果你指定输出文件名位数为"3",则输出的文件名称会变成xx000,xx001...等。
  • -q或-s或--quiet或--silent 不显示指令执行过程。
  • -z或--elide-empty-files 删除长度为0 Byte文件。
  • --help 在线帮助。
  • --version 显示版本信息。

实例

将文本文件testfile以第 2 行为分界点切割成两份,使用如下命令:

csplit testfile 2

testfile文件中的内容如下:

$ cat testfile #查看testfile 文件内容  
hello Linux!  
Linux is a free Unix-type operating system.  
This is a Linux testfile!  
Linux 

使用csplit命令,输出结果如下:

$ csplit testfile 2  
13 #xx00文件字符个数  
76 #xx01文件字符个数  

其中第1 行是第一个文件xx00的字符个数,同样,第2 行为第二个文件xx01的字符个数。同时,在testfile 的同目录下将生成两个文件,文件名分别为xx00、xx01,xx00 中的内容为:

$ cat xx00 #查看分割后的xx00文件内容  
hello Linux! #testfile文件第1行的内容 

xx01 中的内容为:

$ cat xx01 #查看分割后的xx01文件内容  
Linux is a free Unix-type operating system. #testfile文件第2行以后的内容  
This is a Linux testfile!  
Linux 

5.ed命令

Linux ed命令是文本编辑器,用于文本编辑。

ed是Linux中功能最简单的文本编辑程序,一次仅能编辑一行而非全屏幕方式的操作。

ed命令并不是一个常用的命令,一般使用比较多的是vi 指令。但ed文本编辑器对于编辑大文件或对于在shell脚本程序中进行文本编辑很有用。

语法

ed [-][-Gs][-p<字符串>][--help][--version][文件] 

参数

  • -G或--traditional 提供回兼容的功能。
  • -p<字符串> 指定ed在command mode的提示字符。
  • -s,-,--quiet或--silent 不执行开启文件时的检查功能。
  • --help 显示帮助。
  • --version 显示版本信息。

实例

以下是一个 Linux ed 完整实例解析:

$ ed              <- 激活 ed 命令 
a                 <- 告诉 ed 我要编辑新文件 
My name is Titan. <- 输入第一行内容 
And I love Perl very much. <- 输入第二行内容 
.                 <- 返回 ed 的命令行状态 
i                 <- 告诉 ed 我要在最后一行之前插入内容 
I am 24.          <- 将“I am 24.”插入“My name is Titan.”和“And I love Perl very much.”之间 
.                 <- 返回 ed 的命令行状态 
c                 <- 告诉 ed 我要替换最后一行输入内容 
I am 24 years old. <- 将“I am 24.”替换成“I am 24 years old.”(注意:这里替换的是最后输的内容) 
.                 <- 返回 ed 的命令行状态 
w readme.text     <- 将文件命名为“readme.text”并保存(注意:如果是编辑已经存在的文件,只需要敲入 w 即可) 
q                 <- 完全退出 ed 编辑器 

这是文件的内容是:

$ cat readme.text 
My name is Titan. 
I am 24 years old. 
And I love Perl vrey much. 

6.egrep命令

Linux egrep命令用于在文件内查找指定的字符串。

egrep执行效果与"grep-E"相似,使用的语法及参数可参照grep指令,与grep的不同点在于解读字符串的方法。

egrep是用extended regular expression语法来解读的,而grep则用basic regular expression 语法解读,extended regular expression比basic regular expression的表达更规范。

语法

egrep [范本模式] [文件或目录] 

参数说明:

  • [范本模式] :查找的字符串规则。
  • [文件或目录] :查找的目标文件或目录。

实例

显示文件中符合条件的字符。例如,查找当前目录下所有文件中包含字符串"Linux"的文件,可以使用如下命令:

egrep Linux *

结果如下所示:

$ egrep Linux * #查找当前目录下包含字符串“Linux”的文件  
testfile:hello Linux! #以下五行为testfile 中包含Linux字符的行  
testfile:Linux is a free Unix-type operating system.  
testfile:This is a Linux testfile!  
testfile:Linux  
testfile:Linux  
testfile1:helLinux! #以下两行为testfile1中含Linux字符的行  
testfile1:This a Linux testfile!  
#以下两行为testfile_2 中包含Linux字符的行  
testfile_2:Linux is a free unix-type opterating system.  
testfile_2:Linux test  
xx00:hello Linux! #xx00包含Linux字符的行  
xx01:Linux is a free Unix-type operating system. #以下三行为xx01包含Linux字符的行  
xx01:This is a Linux testfile!  
xx01:Linux 

7.ex命令

Linux ex命令用于在Ex模式下启动vim文本编辑器。

ex执行效果如同vi -E,使用语法及参数可参照vi指令,如要从Ex模式回到普通模式,则在vim中输入":vi"或":visual"指令即可。

语法

ex [选项][参数]

参数说明:

+数字:从文件指定的数字行开始显示-b:使用二进制模式编辑文件-c 指令:编辑完第一个文件后执行指定的指令-d :编辑多个文件时,显示差异部分-m :不允许修改文件-n :不使用缓存-oN:其中 N 为数字-r :列出缓存,并显示恢复信息-R :以只读的方式打开文件-s :不显示任何错误信息-V :显示指令的详细执行过程--help :显示帮助信息--version :显示版本信息

实例

在ex 指令后输入文件名按回车键后,即可进入ex 编辑模式,如编辑testfile文件,使用的命令格式如下:

ex testfile 

输出的信息如下:

"testfile" 5L, 95C 

"testfile"表示文件名,5L表示5 行,95 表示字节数

进入ex 模式。输入"visual"回到正常模式

它的操作与vim 中是一样的,此时如果在":"后输入"visual"后按回车键,将进入到vi 指令全屏界面;如果输入"q",则退出编辑器。 

8.fgrep命令

本指令相当于执行grep指令加上参数"-F",详见grep命令说明。

Linux fgrep命令用于查找文件里符合条件的字符串。

语法

fgrep [范本样式][文件或目录...]

实例

具体使用实例请参考grep命令

9.fmt命令

Linux fmt命令用于编排文本文件。

fmt指令会从指定的文件里读取内容,将其依照指定格式重新编排后,输出到标准输出设备。若指定的文件名为"-",则fmt指令会从标准输入设备读取数据。

语法

fmt [-cstu][-p<列起始字符串>][-w<每列字符数>][--help][--version][文件...]

参数说明

  • -c或--crown-margin 每段前两列缩排。
  • -p<列起始字符串>或-prefix=<列起始字符串> 仅合并含有指定字符串的列,通常运用在程序语言的注解方面。
  • -s或--split-only 只拆开字数超出每列字符数的列,但不合并字数不足每列字符数的列。
  • -t或--tagged-paragraph 每列前两列缩排,但第1列和第2列的缩排格式不同。
  • -u或--uniform-spacing 每个字符之间都以一个空格字符间隔,每个句子之间则两个空格字符分隔。
  • -w<每列字符数>或--width=<每列字符数>或-<每列字符数> 设置每列的最大字符数。
  • --help 在线帮助。
  • --version 显示版本信息。

实例

重排指定文件。如文件testfile共5 行文字,可以通过命令对该文件格式进行重排,其命令为:

fmt testfile 

输出结果如下:

$ fmt testfile #重排testfile 文件  
hello Linux! Linux is a free Unix-type operating system. This is a  
Linux testfile! Linux Linux 

将文件testfile重新排成85 个字符一行,并在标准输出设备上输出,其命令应该为:

fmt -w 85 testfile

为了对比,先使用cat 命令查看文件内容:

$ cat testfile #查看testfile 文件的内容  
hello Linux!  
Linux is a free Unix-type operating system.  
This is a Linux testfile!  
Linux  
Linux 

使用fmt命令重排之后,输出结果如下:

$ fmt -w 85 testfile #指定重排宽度为85个字符  
hello Linux! Linux is a free Unix-type operating system. This is a Linux testfile!  
Linux Linux 

10.fold命令

Linux fold命令用于限制文件列宽。

fold指令会从指定的文件里读取内容,将超过限定列宽的列加入增列字符后,输出到标准输出设备。若不指定任何文件名称,或是所给予的文件名为"-",则fold指令会从标准输入设备读取数据。

语法

fold [-bs][-w<每列行数>][--help][--version][文件...]

参数

  • -b或--bytes 以Byte为单位计算列宽,而非采用行数编号为单位。
  • -s或--spaces 以空格字符作为换列点。
  • -w<每列行数>或--width<每列行数> 设置每列的最大行数。
  • --help 在线帮助。
  • --version 显示版本信息。

实例

将一个名为testfile 的文件的行折叠成宽度为30,可使用如下命令:

fold -w 30 testfile

为了对比,先将testfile文件输出如下:

$ cat testfile #查看testfile 中的内容  
Linux networks are becoming more and more common, but 
security is often an overlooked  
issue. Unfortunately, in todays environment all networks 
are potential hacker targets,  
from top-secret military research networks to small home LANs.  
Linux Network Security focuses on securing Linux in a 
networked environment, where the  
security of the entire network needs to be considered 
rather than just isolated machines.  
It uses a mix of theory and practical techniques to 
teach administrators how to install and  
use security applications, as well as how the 
applications work and why they are necessary. 

然后使用fold命令折叠显示:

$ fold -w 30 testfile #行折叠成宽度为30,显示testfile 文件  
Linux networks are becoming mo  
re and more common, but securi  
ty is often an overlooked issu  
e. Unfortunately, in todays  
environment all networks are  
potential hacker targets, from  
top-secret military research  
networks to small home LANs.  
Linux Network Security focuses  
on securing Linux in a networ  
ked environment, where the sec  
urity of the entire network ne  
eds to be considered rather th  
an just isolated machines. It  
uses a mix of theory and pract  
ical techniques to teach admin  
istrators how to install and u  
se security applications, as w  
ell as how the applications wo  
rk and why they are necessary 

11.grep命令

Linux grep命令用于查找文件里符合条件的字符串。

grep指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设grep指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为"-",则grep指令会从标准输入设备读取数据。

语法

grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录...]

参数

  • -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 : 在显示符合样式的那一行之前,标示出该行的列数编号。
  • -q 或 --quiet或--silent : 不显示任何信息。
  • -r 或 --recursive : 此参数的效果和指定"-d recurse"参数相同。
  • -s 或 --no-messages : 不显示错误信息。
  • -v 或 --revert-match : 显示不包含匹配文本的所有行。
  • -V 或 --version : 显示版本信息。
  • -w 或 --word-regexp : 只显示全字符合的列。
  • -x --line-regexp : 只显示全列符合的列。
  • -y : 此参数的效果和指定"-i"参数相同。

Linux 命令大全 Linux 命令大全

实例

1、在当前目录中,查找后缀有 file 字样的文件中包含 test 字符串的文件,并打印出该字符串的行。此时,可以使用如下命令:

grep test *file 

结果如下所示:

$ grep test test* #查找前缀有“test”的文件包含“test”字符串的文件  
testfile1:This a Linux testfile! #列出testfile1 文件中包含test字符的行  
testfile_2:This is a linux testfile! #列出testfile_2 文件中包含test字符的行  
testfile_2:Linux test #列出testfile_2 文件中包含test字符的行 

2、以递归的方式查找符合条件的文件。例如,查找指定目录/etc/acpi 及其子目录(如果存在子目录的话)下所有文件中包含字符串"update"的文件,并打印出该字符串所在行的内容,使用的命令为:

grep -r update /etc/acpi 

输出结果如下:

$ grep -r update /etc/acpi #以递归的方式查找“etc/acpi”  
#下包含“update”的文件  
/etc/acpi/ac.d/85-anacron.sh:# (Things like the slocate updatedb cause a lot of IO.)  
Rather than  
/etc/acpi/resume.d/85-anacron.sh:# (Things like the slocate updatedb cause a lot of  
IO.) Rather than  
/etc/acpi/events/thinkpad-cmos:action=/usr/sbin/thinkpad-keys--update 

3、反向查找。前面各个例子是查找并打印出符合条件的行,通过"-v"参数可以打印出不符合条件行的内容。

查找文件名中包含 test 的文件中不包含test 的行,此时,使用的命令为:

grep -v test *test*

结果如下所示:

$ grep-v test* #查找文件名中包含test 的文件中不包含test 的行  
testfile1:helLinux!  
testfile1:Linis a free Unix-type operating system.  
testfile1:Lin  
testfile_1:HELLO LINUX!  
testfile_1:LINUX IS A FREE UNIX-TYPE OPTERATING SYSTEM.  
testfile_1:THIS IS A LINUX TESTFILE!  
testfile_2:HELLO LINUX!  
testfile_2:Linux is a free unix-type opterating system.  

12.ispell命令

Linux ispell命令用于拼写检查程序。

ispell预设会使用/usr/lib/ispell/english.hash字典文件来检查文本文件。若在检查的文件中找到字典没有的词汇,ispell会建议使用的词汇,或是让你将新的词汇加入个人字典。

语法

ispell [-aAbBClmMnNPStVx][-d<字典文件>][-L<行数>][-p<字典文件>][-w<非字母字符>][-W<字符串长度>][要检查的文件]

参数

  • -a 当其他程序输出送到ispell时,必须使用此参数。
  • -A 读取到"&Include File&"字符串时,就去检查字符串后所指定文件的内容。
  • -b 产生备份文件,文件名为.bak。
  • -B 检查连字错误。
  • -C 不检查连字错误。
  • -d<字典文件> 指定字典文件。
  • -l 从标准输入设备读取字符串,结束后显示拼错的词汇。
  • -L<行数> 指定内文显示的行数。
  • -m 自动考虑字尾的变化。
  • -M 进入ispell后,在画面下方显示指令的按键。
  • -n 检查的文件为noff或troff的格式。
  • -N 进入ispell后,在画面下方不显示指令的按键。
  • -p<字典文件> 指定个人字典文件。
  • -P 不考虑字尾变化的情形。
  • -S 不排序建议取代的词汇。
  • -t 检查的文件为TeX或LaTeX的格式。
  • -V 非ANSI标准的字符会以"M-^"的方式来显示。
  • -w<非字母字符> 检查时,特别挑出含有指定的字符。
  • -W<字符串长度> 不检查指定长度的词汇。
  • -x 不要产生备份文件。

实例

检查文件的拼写。例如,检查testfile文件,可使用如下命令:

ispell testfile 

如果文件中出现可疑词汇,则第一个出现的可疑词汇以高亮显示,并在屏幕下方给出词汇的修改意见,以及ispell的操作命令。如下所示:

netwrks File: testfile  
Linux netwrks are becoming more and more common, but security is often an overlooked  
issue. Unfortunately  
0: networks  
[SP] <number> R)epl A)ccept I)nsert L)ookup U)ncap Q)uit e(X)it or ? for help

本例中,检查出netwrks 错误,并提示纠正信息,此时输入"0",即使用networks 来纠正错误,同时继续显示下一个错误,直到所有的错误显示完毕。

通过以上实例我们可以发现,文件testfile中有拼写错误,对该文件进行修改后需备份文件。此时使用如下命令:

ispell-b testfile    #检查拼写错误的同时,备份文件 

如果文件已经无拼写错误,则不显示任何信息,通过ls命令我们也可以查看到当前文件目录下产生了文件testfile的备份文件testfile.bak。查看结果如下所示:

$ ls #以列表的形式查看当前目录下的文件  
examples.desktop testfile_1 testfile.bak xx01 模板图片 音乐  
testfile testfile1 testfile_2 xx00 公共的视频文档桌面 

其中,testfile.bak 文件就是刚才命令生成的备份文件,内容与原来的testfile 文件内容是一样的。 

13.jed命令

Linux jed命令用于编辑文本文件。

Jed是以Slang所写成的程序,适合用来编辑程序原始代码。

语法

jed [-2n][-batch][-f<函数>][-g<行数>][-i<文件>][-I<文件>][-s<字符串>][文件]

参数

  • -2 显示上下两个编辑区。
  • -batch 以批处理模式来执行。
  • -f<函数> 执行Slang函数。
  • -g<行数> 移到缓冲区中指定的行数。
  • -i<文件> 将指定的文件载入缓冲区。
  • -n 不要载入jed.rc配置文件。
  • -s<字符串> 查找并移到指定的字符串。

实例

jed主要用于编辑程序的源码,编辑源码时将以彩色高亮的方式显示程序的语法。例如使用jed编辑一个C语言的源代码文件,可使用如下命令:

jed main.c       #用jed编辑器打开main.c 文件 

输出结果如下:

F10 key ==> File Edit Mode Search Buffers Windows System Help #编辑器菜单  
/*-*- linux-c-*-*/ #编辑区  
#include <linux/mm.h> 
#include <linux/sysctl.h> 
#include <linux/nsproxy.h> 
static struct list_head *  
net_ctl_header_lookup(struct ctl_table_root *root, struct nsproxy *namespaces)  
{  
return &namespaces->net_ns->sysctl_table_headers;  
}  
static struct ctl_table_root net_sysctl_root = {  
.lookup = net_ctl_header_lookup,  
};  
static int sysctl_net_init(struct net *net)  
{  
INIT_LIST_HEAD(&net->sysctl_table_headers);  
return 0;  
}  
-----+(Jed 0.99.18U) Emacs: main.c (C) All 6:06pm-----------------------------  
#从左到右分别为jed版本编号、当前是模拟emacs编辑器、打开的文件名、现在的时间  
loading /usr/share/jed/lib/modeinfo.slc 

14.joe命令

Linux joe命令用于编辑文本文件。

Joe是一个功能强大的全屏幕文本编辑程序。操作的复杂度要比Pico高一点,但是功能较为齐全。Joe一次可开启多个文件,每个文件各放在一个编辑区内,并可在文件之间执行剪贴的动作。

语法

joe [-asis][-beep][-csmode][-dopadding][-exask][-force][-help][-keepup][-lightoff][-arking][-mid][-nobackups][-nonotice][-nosta][-noxon][-orphan][-backpath<目录>][-columns<栏位>][-lines<行数>][-pg<行数>][-skiptop<行数>][-autoindent crlf linums overwrite rdonly wordwrap][+<行数>][-indentc<缩排字符>][-istep<缩排字符数>][-keymap<按键配置文件>][-lmargin<栏数>][-rmargin<栏数>][-tab<栏数>][要编辑的文件]</p>

参数

以下为程序参数-asis 字符码超过127的字符不做任何处理。-backpath<目录> 指定备份文件的目录。-beep 编辑时,若有错误即发出哗声。
  • -columns<栏位> 设置栏数。
  • -csmode 可执行连续查找模式。
  • -dopadding 是程序跟tty间存在缓冲区。
  • -exask 在程序中,执行"Ctrl+k+x"时,会先确认是否要保存文件。
  • -force 强制在最后一行的结尾处加上换行符号。
  • -help 执行程序时一并显示帮助。
  • -keepup 在进入程序后,画面上方为状态列。
  • -lightoff 选取的区块在执行完区块命令后,就会回复成原来的状态。
  • -lines<行数> 设置行数。
  • -marking 在选取区块时,反白区块会随着光标移动。
  • -mid 当光标移出画面时,即自动卷页,使光标回到中央。
  • -nobackups 不建立备份文件。
  • -nonotice 程序执行时,不显示版权信息。
  • -nosta 程序执行时,不显示状态列。
  • -noxon 尝试取消"Ctrl+s"与"Ctrl+q"键的功能。
  • -orphan 若同时开启一个以上的文件,则其他文件会置于独立的缓冲区,而不会另外开启编辑区。
  • -pg<行数> 按"PageUp"或"PageDown"换页时,所要保留前一页的行数。
  • -skiptop<行数> 不使用屏幕上方指定的行数。
  • 以下为文件参数
  • +<行数> 指定开启文件时,光标所在的行数。
  • -autoindent 自动缩排。
  • -crlf 在换行时,使用CR-LF字符。
  • -indentc<缩排字符> 执行缩排时,实际插入的字符。
  • -istep<缩排字符数> 每次执行缩排时,所移动的缩排字符数。
  • -keymap<按键配置文件> 使用不同的按键配置文件。
  • -linums 在每行前面加上行号。
  • -lmargin<栏数> 设置左侧边界。
  • -overwrite 设置覆盖模式。
  • -rmargin<栏数> 设置右侧边界。
  • -tab<栏数> 设置tab的宽度。
  • -rdonly 以只读的方式开启文件-wordwrap编辑时若超过右侧边界,则自动换行。

实例

利用joe命令编辑文本文件。例如利用joe编辑C 语言源代码main.c,使用如下命令:

joe main.c

与jed类似,joe编辑器中C语言的语法也以彩色的方式显示。效果如下:

I A main.c (c) Row 1 Col 1 12:28 Ctrl-K H for help  
#上排从左至右分别为打开的文件名、光标所在行列数、现在时间、显示操作说明  
/*-*- linux-c-*-*/ #编辑区  
#include <linux/mm.h> 
#include <linux/sysctl.h> 
#include <linux/nsproxy.h> 
static struct list_head *  
net_ctl_header_lookup(struct ctl_table_root *root, struct nsproxy *namespaces)  
{  
return &namespaces->net_ns->sysctl_table_headers;  
}  
static struct ctl_table_root net_sysctl_root = {  
.lookup = net_ctl_header_lookup,  
};  
static int sysctl_net_init(struct net *net)  
{  
INIT_LIST_HEAD(&net->sysctl_table_headers);  
return 0;  
}  
** Joe's Own Editor v3.5 ** (utf-8) ** Copyright . 2006 ** #joe编辑区的版本及版权信息 

joe编辑器有一些常用的组合键,例如可以通过Ctrl+K+H 寻求联机帮助,首先按Ctrl+K组合键,再输入字母H,即可调出帮助菜单,通过该帮助信息可以方便地获知如何对joe 编辑器进行操作。 

15.join命令

Linux join命令用于将两个文件中,指定栏位内容相同的行连接起来。

找出两个文件中,指定栏位内容相同的行,并加以合并,再输出到标准输出设备。

语法

join [-i][-a<12>][-e<字符串>][-o<格式>][-t<字符>][-v<12>][-1<栏位>][-2<栏位>][--help][--version][文件1][文件2]

参数

  • -a<1或2> 除了显示原来的输出内容之外,还显示指令文件中没有相同栏位的行。
  • -e<字符串> 若[文件1]与[文件2]中找不到指定的栏位,则在输出中填入选项中的字符串。
  • -i或--igore-case 比较栏位内容时,忽略大小写的差异。
  • -o<格式> 按照指定的格式来显示结果。
  • -t<字符> 使用栏位的分隔字符。
  • -v<1或2> 跟-a相同,但是只显示文件中没有相同栏位的行。
  • -1<栏位> 连接[文件1]指定的栏位。
  • -2<栏位> 连接[文件2]指定的栏位。
  • --help 显示帮助。
  • --version 显示版本信息。

实例

连接两个文件。

为了清楚地了解join命令,首先通过cat命令显示文件testfile_1和 testfile_2 的内容。

然后以默认的方式比较两个文件,将两个文件中指定字段的内容相同的行连接起来,在终端中输入命令:

join testfile_1 testfile_2 

首先查看testfile_1、testfile_2 中的文件内容:

$ cat testfile_1 #testfile_1文件中的内容  
Hello 95 #例如,本例中第一列为姓名,第二列为数额  
Linux 85  
test 30  
cmd@hdd-desktop:~$ cat testfile_2 #testfile_2文件中的内容  
Hello 2005 #例如,本例中第一列为姓名,第二列为年份  
Linux 2009  
test 2006 

然后使用join命令,将两个文件连接,结果如下:

$ join testfile_1 testfile_2 #连接testfile_1、testfile_2中的内容  
Hello 95 2005 #连接后显示的内容  
Linux 85 2009  
test 30 2006 

文件1与文件2的位置对输出到标准输出的结果是有影响的。例如将命令中的两个文件互换,即输入如下命令:

join testfile_2 testfile_1

最终在标准输出的输出结果将发生变化,如下所示:

$ join testfile_2 testfile_1 #改变文件顺序连接两个文件  
Hello 2005 95 #连接后显示的内容  
Linux 2009 85  
test 2006 30 

16.look命令

Linux look命令用于查询单词。

look指令用于英文单字的查询。您仅需给予它欲查询的字首字符串,它会显示所有开头字符串符合该条件的单字。

语法

look [-adf][-t<字尾字符串>][字首字符串][字典文件]

参数说明

  • -a 使用另一个字典文件web2,该文件也位于/usr/dict目录下。
  • -d 只对比英文字母和数字,其余一慨忽略不予比对。
  • -f 忽略字符大小写差别。
  • -t<字尾字符串> 设置字尾字符串。

实例

为了查找在testfile文件中以字母L开头的所有的行,可以输入如下命令:

look L testfile 

原文件testfile中的内容如下:

$ cat testfile #查看testfile 文件内容  
HELLO LINUX!  
Linux is a free unix-type opterating system.  
This is a linux testfile!  
Linux test 

在testfile文件中使用look命令查找以"L"开头的单词,结果如下:

$ look L testfile                              #查找以“L”开头的单词  
Linux is a free unix-type opterating system.   #第二行以“L”开头,列出全句  
Linux test                                     #第四行以“L”开头,列出全句 

17.mtype命令

mtype为mtools工具指令,模拟MS-DOS的type指令,可显示MS-DOS文件的内容。

语法

mtype [-st][文件]

参数说明

  • -s 去除8位字符码集的第一个位,使它兼容于7位的ASCII。
  • -t 将MS-DOS文本文件中的"换行+光标移至行首"字符转换成Linux的换行字符。

实例

打开名为dos.txt 的MS-DOS文件可使用如下命令:

mtype dos.txt         #打开MS-DOS 文件 

显示结果如下:

$ mtype dos.txt #打开MS-DOS 文件  
Linux networks are becoming more and more common, but security is often an overlooked  
issue. Unfortunately, in todays environment all networks are potential hacker targets,  
from top-secret military research networks to small home LANs.  
Linux Network Securty focuses on securing Linux in a networked environment, where the  
security of the entire network needs to be considered rather than just isolated machines.  
It uses a mix of theory and practicl techniques to teach administrators how to install and  
use security applications, as well as how the applcations work and why they are necessary.  

18.pico命令

Linux pico命令用于编辑文字文件。

pico是个简单易用、以显示导向为主的文字编辑程序,它伴随着处理电子邮件和新闻组的程序pine而来。

语法

pico [-bdefghjkmqtvwxz][-n<间隔秒数>][-o<工作目录>][-r<编辑页宽>][-s<拼字检查器>][+<列数编号>][文件]

参数说明

  • -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指令进入编辑模式时,从指定的列数开始编辑。

实例

使用pico命令来编辑testfile文件,在终端中输入如下命令:

pico testfile 

输出结果如下:

GNU nano 2.0.9 文件: testfile #从左到右分别为编辑器版本号、文件名  
#编辑区  
Linux networks are becoming more and more common, but security is often an over$  
Linux Network Securty focuses on securing Linux in a networked environment, whe$  
[ 已读取3 行] #以下为菜单栏  
^G 求助^O 写入^R 读档^Y 上页^K 剪切文字^C 在标位置  
^X 离开^J 对齐^W 搜寻^V 下页^U 还原剪切^T 拼写检查 

19.rgrep命令

Linux rgrep命令用于递归查找文件里符合条件的字符串。

rgrep指令的功能和grep指令类似,可查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设rgrep指令会把含有范本样式的那一列显示出来。

语法

rgrep [-?BcDFhHilnNrv][-R<范本样式>][-W<列长度>][-x<扩展名>][--help][--version][范本样式][文件或目录...]

参说明数

  • -? 显示范本样式与范例的说明。
  • -B 忽略二进制的数据。
  • -c 计算符合范本样式的列数。
  • -D 排错模式,只列出指令搜寻的目录清单,而不会读取文件内容。
  • -F 当遇到符号连接时,rgrep预设是忽略不予处理,加上本参数后,rgrep指令就会读取该连接所指向的原始文件的内容。
  • -h 特别将符合范本样式的字符串标示出来。
  • -H 只列出符合范本样式的字符串,而非显示整列的内容。
  • -i 忽略字符大小写的差别。
  • -l 列出文件内容符合指定的范本样式的文件名称。
  • -n 在显示符合坊本样式的那一列之前,标示出该列的列数编号。
  • -N 不要递归处理。
  • -r 递归处理,将指定目录下的所有文件及子目录一并处理。
  • -R<范本样式> 此参数的效果和指定"-r"参数类似,但只主力符合范本样式文件名称的文件。
  • -v 反转查找。
  • -W<列长度> 限制符合范本样式的字符串所在列,必须拥有的字符数。
  • -x<扩展名> 只处理符合指定扩展名的文件名称的文件。
  • --help 在线帮助。
  • --version 显示版本信息。

实例

在当前目录下查找句子中包含"Hello"字符串的文件,可使用如下命令:

rgrep Hello * 

其搜索结果如下:

$ rgrep Hello *             #在当前目录下查找句子中包含“Hello”字符串的文件  
testfile_1:Hello 95         #testfile_1中包含“Hello”字符串的句子  
testfile_2:Hello 2005       #testfile_2中包含“Hello”字符串的句子 

20.sed命令

Linux sed命令是利用script来处理文本文件。

sed可依照script的指令,来处理、编辑文本文件。

Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

语法

sed [-hnV][-e<script>][-f<script文件>][文本文件]

参数说明

  • -e<script>或--expression=<script> 以选项中指定的script来处理输入的文本文件。
  • -f<script文件>或--file=<script文件> 以选项中指定的script文件来处理输入的文本文件。
  • -h或--help 显示帮助。
  • -n或--quiet或--silent 仅显示script处理后的结果。
  • -V或--version 显示版本信息。

动作说明

  • a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
  • c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
  • d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
  • i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
  • p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
  • s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!

实例

在testfile文件的第四行后添加一行,并将结果输出到标准输出,在命令行提示符下输入如下命令:

sed -e 4a\newLine testfile 

首先查看testfile中的内容如下:

$ cat testfile #查看testfile 中的内容  
HELLO LINUX!  
Linux is a free unix-type opterating system.  
This is a linux testfile!  
Linux test 

使用sed命令后,输出结果如下:

$ sed -e 4a\newline testfile #使用sed 在第四行后添加新字符串  
HELLO LINUX! #testfile文件原有的内容  
Linux is a free unix-type opterating system.  
This is a linux testfile!  
Linux test  
newline 

以行为单位的新增/删除

将 /etc/passwd 的内容列出并且列印行号,同时,请将第 2~5 行删除!

[root@www ~]# nl /etc/passwd | sed '2,5d'
1 root:x:0:0:root:/root:/bin/bash
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
.....(后面省略).....

sed 的动作为 '2,5d' ,那个 d 就是删除!因为 2-5 行给他删除了,所以显示的数据就没有 2-5 行罗~ 另外,注意一下,原本应该是要下达 sed -e 才对,没有 -e 也行啦!同时也要注意的是, sed 后面接的动作,请务必以 '' 两个单引号括住喔!

只要删除第 2 行

nl /etc/passwd | sed '2d' 

要删除第 3 到最后一行

nl /etc/passwd | sed '3,$d' 

在第二行后(亦即是加在第三行)加上『drink tea?』字样!

[root@www ~]# nl /etc/passwd | sed '2a drink tea'
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
drink tea
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
.....(后面省略).....

那如果是要在第二行前

nl /etc/passwd | sed '2i drink tea' 

如果是要增加两行以上,在第二行后面加入两行字,例如『Drink tea or .....』与『drink beer?』

[root@www ~]# nl /etc/passwd | sed '2a Drink tea or ......\
> drink beer ?'
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
Drink tea or ......
drink beer ?
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
.....(后面省略).....

每一行之间都必须要以反斜杠『 \ 』来进行新行的添加喔!所以,上面的例子中,我们可以发现在第一行的最后面就有 \ 存在。

以行为单位的替换与显示

将第2-5行的内容取代成为『No 2-5 number』呢?

[root@www ~]# nl /etc/passwd | sed '2,5c No 2-5 number'
1 root:x:0:0:root:/root:/bin/bash
No 2-5 number
6 sync:x:5:0:sync:/sbin:/bin/sync
.....(后面省略).....

透过这个方法我们就能够将数据整行取代了!

仅列出 /etc/passwd 文件内的第 5-7 行

[root@www ~]# nl /etc/passwd | sed -n '5,7p'
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

可以透过这个 sed 的以行为单位的显示功能, 就能够将某一个文件内的某些行号选择出来显示。

数据的搜寻并显示

搜索 /etc/passwd有root关键字的行

nl /etc/passwd | sed '/root/p'
1  root:x:0:0:root:/root:/bin/bash
1  root:x:0:0:root:/root:/bin/bash
2  daemon:x:1:1:daemon:/usr/sbin:/bin/sh
3  bin:x:2:2:bin:/bin:/bin/sh
4  sys:x:3:3:sys:/dev:/bin/sh
5  sync:x:4:65534:sync:/bin:/bin/sync
....下面忽略 

如果root找到,除了输出所有行,还会输出匹配行。

使用-n的时候将只打印包含模板的行。

nl /etc/passwd | sed -n '/root/p'
1  root:x:0:0:root:/root:/bin/bash

数据的搜寻并删除

删除/etc/passwd所有包含root的行,其他行输出

nl /etc/passwd | sed  '/root/d'
2  daemon:x:1:1:daemon:/usr/sbin:/bin/sh
3  bin:x:2:2:bin:/bin:/bin/sh
....下面忽略
#第一行的匹配root已经删除了

数据的搜寻并执行命令

搜索/etc/passwd,找到root对应的行,执行后面花括号中的一组命令,每个命令之间用分号分隔,这里把bash替换为blueshell,再输出这行:

nl /etc/passwd | sed -n '/bash/{s/bash/blueshell/;p;q}'    
1  root:x:0:0:root:/root:/bin/blueshell

最后的q是退出。

数据的搜寻并替换

除了整行的处理模式之外, sed 还可以用行为单位进行部分数据的搜寻并取代。基本上 sed 的搜寻与替代的与 vi 相当的类似!他有点像这样:

sed 's/要被取代的字串/新的字串/g'

先观察原始信息,利用 /sbin/ifconfig 查询 IP

[root@www ~]# /sbin/ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:90:CC:A6:34:84
inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::290:ccff:fea6:3484/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
.....(以下省略).....

本机的ip是192.168.1.100。

将 IP 前面的部分予以删除

[root@www ~]# /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g'
192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0

接下来则是删除后续的部分,亦即: 192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0

将 IP 后面的部分予以删除

[root@www ~]# /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' | sed 's/Bcast.*$//g'
192.168.1.100

多点编辑

一条sed命令,删除/etc/passwd第三行到末尾的数据,并把bash替换为blueshell

nl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/'
1  root:x:0:0:root:/root:/bin/blueshell
2  daemon:x:1:1:daemon:/usr/sbin:/bin/sh

-e表示多点编辑,第一个编辑命令删除/etc/passwd第三行到末尾的数据,第二条命令搜索bash替换为blueshell。

直接修改文件内容(危险动作)

sed 可以直接修改文件的内容,不必使用管道命令或数据流重导向! 不过,由於这个动作会直接修改到原始的文件,所以请你千万不要随便拿系统配置来测试! 我们还是使用下载的 regular_express.txt 文件来测试看看吧!

利用 sed 将 regular_express.txt 内每一行结尾若为 . 则换成 !

[root@www ~]# sed -i 's/\.$/\!/g' regular_express.txt

利用 sed 直接在 regular_express.txt 最后一行加入『# This is a test』

[root@www ~]# sed -i '$a # This is a test' regular_express.txt

由於 $ 代表的是最后一行,而 a 的动作是新增,因此该文件最后新增『# This is a test』!

sed 的『 -i 』选项可以直接修改文件内容,这功能非常有帮助!举例来说,如果你有一个 100 万行的文件,你要在第 100 行加某些文字,此时使用 vim 可能会疯掉!因为文件太大了!那怎办?就利用 sed 啊!透过 sed 直接修改/取代的功能,你甚至不需要使用 vim 去修订!

21.sort命令

Linux sort命令用于将文本文件内容加以排序。

sort可针对文本文件的内容,以行为单位来排序。

语法

sort [-bcdfimMnr][-o<输出文件>][-t<分隔字符>][+<起始栏位>-<结束栏位>][--help][--verison][文件]

参数说明

  • -b 忽略每行前面开始出的空格字符。
  • -c 检查文件是否已经按照顺序排序。
  • -d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
  • -f 排序时,将小写字母视为大写字母。
  • -i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
  • -m 将几个排序好的文件进行合并。
  • -M 将前面3个字母依照月份的缩写进行排序。
  • -n 依照数值的大小排序。
  • -o<输出文件> 将排序后的结果存入指定的文件。
  • -r 以相反的顺序来排序。
  • -t<分隔字符> 指定排序时所用的栏位分隔字符。
  • +<起始栏位>-<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
  • --help 显示帮助。
  • --version 显示版本信息。

实例

在使用sort命令以默认的式对文件的行进行排序,使用的命令如下:

sort testfile 

sort 命令将以默认的方式将文本文件的第一列以ASCII 码的次序排列,并将结果输出到标准输出。

使用 cat命令显示testfile文件可知其原有的排序如下:

$ cat testfile      #testfile文件原有排序  
test 30  
Hello 95  
Linux 85 

使用sort命令重排后的结果如下:

$ sort testfile #重排结果  
Hello 95  
Linux 85  
test 30 

22.spell命令

Linux spell命令可建立拼写检查程序。

spell可从标准输入设备读取字符串,结束后显示拼错的词汇。

语法

spell

实例

检查文件testfile是否有拼写错误,在命令行提示符下输入如下命令:

spell testfile 

如果文件中有单词拼写错误,则输出如下信息:

$ spell testfile   #检查testfile 拼写错误  
scurity            #以下为有错误的单词  
tp  
LANs  
Securty  
practicl  
applcations  
necesary 

如果所检查的文件没有单词拼写错误,那么,命令运行后不会给出任何信息。

检查从标准输入读取的字符串。例如在命令行中输入如下命令:

spell 

按回车键后,输入一串字符串,然后按Ctrl+D 组合键退出spell,屏幕上将显示拼写有错误的单词。如下所示:

$ spell #检查标准输入的字符串的拼写错误  
hell,this is a linx sustem! #拼写错误的字符串  
linx #以下为有拼写错误的单词  
sustem 

23.tr命令

Linux tr 命令用于转换或删除文件中的字符。

tr 指令从标准输入设备读取数据,经过字符串转译后,将结果输出到标准输出设备。

语法

tr [-cdst][--help][--version][第一字符集][第二字符集]  
tr [OPTION]…SET1[SET2] 

参数说明:

  • -c, --complement:反选设定字符。也就是符合 SET1 的部份不做处理,不符合的剩余部份才进行转换
  • -d, --delete:删除指令字符
  • -s, --squeeze-repeats:缩减连续重复的字符成指定的单个字符
  • -t, --truncate-set1:削减 SET1 指定范围,使之与 SET2 设定长度相等
  • --help:显示程序用法信息
  • --version:显示程序本身的版本信息

字符集合的范围:

  • \NNN 八进制值的字符 NNN (1 to 3 为八进制值的字符)
  • \\ 反斜杠
  • \a Ctrl-G 铃声
  • \b Ctrl-H 退格符
  • \f Ctrl-L 走行换页
  • \n Ctrl-J 新行
  • \r Ctrl-M 回车
  • \t Ctrl-I tab键
  • \v Ctrl-X 水平制表符
  • CHAR1-CHAR2 :字符范围从 CHAR1 到 CHAR2 的指定,范围的指定以 ASCII 码的次序为基础,只能由小到大,不能由大到小。
  • [CHAR*] :这是 SET2 专用的设定,功能是重复指定的字符到与 SET1 相同长度为止
  • [CHAR*REPEAT] :这也是 SET2 专用的设定,功能是重复指定的字符到设定的 REPEAT 次数为止(REPEAT 的数字采 8 进位制计算,以 0 为开始)
  • [:alnum:] :所有字母字符与数字
  • [:alpha:] :所有字母字符
  • [:blank:] :所有水平空格
  • [:cntrl:] :所有控制字符
  • [:digit:] :所有数字
  • [:graph:] :所有可打印的字符(不包含空格符)
  • [:lower:] :所有小写字母
  • [:print:] :所有可打印的字符(包含空格符)
  • [:punct:] :所有标点字符
  • [:space:] :所有水平与垂直空格符
  • [:upper:] :所有大写字母
  • [:xdigit:] :所有 16 进位制的数字
  • [=CHAR=] :所有符合指定的字符(等号里的 CHAR,代表你可自订的字符)

实例

将文件testfile中的小写字母全部转换成大写字母,此时,可使用如下命令:

cat testfile |tr a-z A-Z 

testfile文件中的内容如下:

$ cat testfile         #testfile原来的内容  
Linux networks are becoming more and more common, 
but scurity is often an overlooked  
issue. Unfortunately, in todays environment all networks 
are potential hacker targets,  
fro0m tp-secret military research networks to small home LANs.  
Linux Network Securty focuses on securing Linux in a 
networked environment, where the  
security of the entire network needs to be considered
rather than just isolated machines.  
It uses a mix of theory and practicl techniques to 
teach administrators how to install and  
use security applications, as well as how the 
applcations work and why they are necesary. 

使用 tr 命令大小写转换后,得到如下输出结果:

$ cat testfile | tr a-z A-Z #转换后的输出  
LINUX NETWORKS ARE BECOMING MORE AND MORE COMMON, BUT SCURITY IS OFTEN AN OVERLOOKED  
ISSUE. UNFORTUNATELY, IN TODAYS ENVIRONMENT ALL NETWORKS ARE POTENTIAL HACKER TARGETS,  
FROM TP-SECRET MILITARY RESEARCH NETWORKS TO SMALL HOME LANS.  
LINUX NETWORK SECURTY FOCUSES ON SECURING LINUX IN A NETWORKED ENVIRONMENT, WHERE THE  
SECURITY OF THE ENTIRE NETWORK NEEDS TO BE CONSIDERED RATHER THAN JUST ISOLATED MACHINES.  
IT USES A MIX OF THEORY AND PRACTICL TECHNIQUES TO TEACH ADMINISTRATORS HOW TO INSTALL AND  
USE SECURITY APPLICATIONS, AS WELL AS HOW THE APPLCATIONS WORK AND WHY THEY ARE NECESARY. 

大小写转换,也可以通过[:lower][:upper]参数来实现。例如使用如下命令:

cat testfile |tr [:lower:] [:upper:] 

输出结果如下:

$ cat testfile | tr [:lower:] [:upper:] #转换后的输出  
LINUX NETWORKS ARE BECOMING MORE AND MORE COMMON, BUT SCURITY IS OFTEN AN OVERLOOKED  
ISSUE. UNFORTUNATELY, IN TODAYS ENVIRONMENT ALL NETWORKS ARE POTENTIAL HACKER TARGETS,  
FROM TP-SECRET MILITARY RESEARCH NETWORKS TO SMALL HOME LANS.  
LINUX NETWORK SECURTY FOCUSES ON SECURING LINUX IN A NETWORKED ENVIRONMENT, WHERE THE  
SECURITY OF THE ENTIRE NETWORK NEEDS TO BE CONSIDERED RATHER THAN JUST ISOLATED MACHINES.  
IT USES A MIX OF THEORY AND PRACTICL TECHNIQUES TO TEACH ADMINISTRATORS HOW TO INSTALL AND  
USE SECURITY APPLICATIONS, AS WELL AS HOW THE APPLCATIONS WORK AND WHY THEY ARE NECESARY. 

24.expr命令

expr命令是一个手工命令行计数器,用于在UNIX/LINUX下求表达式变量的值,一般用于整数值,也可用于字符串。

语法

expr 表达式

表达式说明:

  • 用空格隔开每个项;
  • 用 / (反斜杠) 放在 shell 特定的字符前面;
  • 对包含空格和其他特殊字符的字符串要用引号括起来

实例

1、计算字串长度

> expr length this is a test
 14

2、抓取字串

> expr substr this is a test 3 5
is is

3、抓取第一个字符数字串出现的位置

> expr index "sarasara"  a
 2

4、整数运算

 > expr 14 % 9
 5
 > expr 10 + 10
 20
 > expr 1000 + 900
 1900
 > expr 30 / 3 / 2
 5
 > expr 30 \* 3 (使用乘号时,必须用反斜线屏蔽其特定含义。因为shell可能会误解显示星号的意义)
 90
 > expr 30 * 3
 expr: Syntax error

25.unip命令

Linux uniq命令用于检查及删除文本文件中重复出现的行列。

uniq可检查文本文件中重复出现的行列。

语法

uniq [-cdu][-f<栏位>][-s<字符位置>][-w<字符位置>][--help][--version][输入文件][输出文件]

参数

  • -c或--count 在每列旁边显示该行重复出现的次数。
  • -d或--repeated 仅显示重复出现的行列。
  • -f<栏位>或--skip-fields=<栏位> 忽略比较指定的栏位。
  • -s<字符位置>或--skip-chars=<字符位置> 忽略比较指定的字符。
  • -u或--unique 仅显示出一次的行列。
  • -w<字符位置>或--check-chars=<字符位置> 指定要比较的字符。
  • --help 显示帮助。
  • --version 显示版本信息。
  • [输入文件] 指定已排序好的文本文件。
  • [输出文件] 指定输出的文件。

实例

文件testfile中第2 行、第5 行、第9 行为相同的行,使用uniq 命令删除重复的行,可使用以下命令:

uniq testfile 

testfile中的原有内容为:

$ cat testfile      #原有内容  
test 30  
test 30  
test 30  
Hello 95  
Hello 95  
Hello 95  
Hello 95  
Linux 85  
Linux 85 

使用uniq 命令删除重复的行后,有如下输出结果:

$ uniq testfile     #删除重复行后的内容  
test 30  
Hello 95  
Linux 85 

检查文件并删除文件中重复出现的行,并在行首显示该行重复出现的次数。使用如下命令:

uniq-c testfile 

结果输出如下:

$ uniq-ctestfile      #删除重复行后的内容  
3 test 30             #前面的数字的意义为该行共出现了3次  
4 Hello 95            #前面的数字的意义为该行共出现了4次  
2 Linux 85            #前面的数字的意义为该行共出现了2次 

26.wc命令

Linux wc命令用于计算字数。

利用wc指令我们可以计算文件的Byte数、字数、或是列数,若不指定文件名称、或是所给予的文件名为"-",则wc指令会从标准输入设备读取数据。

语法

wc [-clw][--help][--version][文件...]

参数

  • -c或--bytes或--chars 只显示Bytes数。
  • -l或--lines 只显示行数。
  • -w或--words 只显示字数。
  • --help 在线帮助。
  • --version 显示版本信息。

实例

在默认的情况下,wc将计算指定文件的行数、字数,以及字节数。使用的命令为:

wc testfile 

先查看testfile文件的内容,可以看到:

$ cat testfile  
Linux networks are becoming more and more common, but scurity is often an overlooked  
issue. Unfortunately, in todays environment all networks are potential hacker targets,  
fro0m tp-secret military research networks to small home LANs.  
Linux Network Securty focuses on securing Linux in a networked environment, where the  
security of the entire network needs to be considered rather than just isolated machines.  
It uses a mix of theory and practicl techniques to teach administrators how to install and  
use security applications, as well as how the applcations work and why they are necesary. 

使用 wc统计,结果如下:

$ wc testfile           # testfile文件的统计信息  
3 92 598 testfile       # testfile文件的行数为3、单词数92、字节数598 

其中,3 个数字分别表示testfile文件的行数、单词数,以及该文件的字节数。

如果想同时统计多个文件的信息,例如同时统计testfile、testfile_1、testfile_2,可使用如下命令:

wc testfile testfile_1 testfile_2   #统计三个文件的信息 

输出结果如下:

$ wc testfile testfile_1 testfile_2  #统计三个文件的信息  
3 92 598 testfile                    #第一个文件行数为3、单词数92、字节数598  
9 18 78 testfile_1                   #第二个文件的行数为9、单词数18、字节数78  
3 6 32 testfile_2                    #第三个文件的行数为3、单词数6、字节数32  
15 116 708 总用量                    #三个文件总共的行数为15、单词数116、字节数708 

27.let命令

命令:let

let 命令是 BASH 中用于计算的工具,用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量。如果表达式中包含了空格或其他特殊字符,则必须引起来。

语法格式

let arg [arg ...]

参数说明:

arg:要执行的表达式

实例:

自加操作:let no++

自减操作:let no--

简写形式 let no+=10,let no-=20,分别等同于 let no=no+10,let no=no-20

以下实例计算 a 和 b 两个表达式,并输出结果:

#!/bin/bash

let a=5+4
let b=9-3 
echo $a $b

以上实例执行结果为:

9 6

  1. let 不需要空格隔开表达式的各个字符。而 expr 后面的字符需要空格隔开各个字符。

    # expr 实例
    $ s=`expr 2 + 3`
    $ echo $s
    5
    
    # let 实例
    $ let s=(2+3)*4
    $ echo $s
    20

2.let 示例

i=0  
while((i<=5))  
do  
    echo $i  
    let i++  
done  

2018-07-30 20:50:28 qq_28752595 阅读数 4340

vi有两个模式:一个是编辑一个是命令。我们从命令进入编辑为:i,o,a。一般使用的是i:因为这个我是最熟悉的。退出点击Esc键,就进入命令模式。

 

我们一般进入编辑模式,来进行添加,修改,删除。

但是当我们删除和修改的内容过多的时候,我们使用命令行模式,进行修改,这样方便,快捷,而命令行中,最常用到的是x,dd,u,p这四个命令:

x:删除当前字符;

dd:删除当前行;

u:恢复前一步操作;

p:复制之前删除的行。

 

vi是Linux终端下或控制台下常用的编辑器,基本的操作方式为:vi /路径/文件名

  例如,vi /etc/saikik表示显示/etc/saikik文件的内容。使用键盘上的Page Up和Page Down键可以上下翻页;按下Insert键,可以见到窗口左下角有“Insert”字样,表示当前为插入编辑状态,这时从键盘输入的内容将插入到光标位置;再按下Insert键,左下角将有“Replace”字样,表示当前为替换编辑状态,这时从键盘输入的内容将替换光标位置的内容。编辑完内容后,按下Esc键,并输入“:wq”,然后回车就可以保存退出。

  如果不想保存而直接退出,则按下Esc键后,输入“:q!”,然后回车即可。“wq”表示Write和Quit,即保存退出;“q!”表示忽略修改强行退出。

2016-02-25 09:56:21 u013142781 阅读数 66528

刚接触Linux,前几天申请了个免费体验的阿里云服务器,选择的是Ubuntu系统,配置jdk环境变量的时候需要编辑文件。

vi命令编辑文件,百度了一下,很多回答不是很全面,因此编辑文件话了一些时间。

这里博主整理了一下,分享给大家。

一、vi编辑器有3种基本工作模式

首先需要知道vi编辑器有3种基本工作模式,分别是:命令模式、文本输入模式、和末行模式。

第一:命令行模式:该模式是进入vi编辑器后的默认模式。任何时候,不管用户处于何种模式,按下ESC键即可进入命令模式。在该模式下,用户可以输入vi命令,用户管理自己的文档。此时从键盘上输入的任何字符都被当作编辑命令来解释。若输入的字符是合法的vi命令,则vi在接受用户命令之后完成相应的动作。但需要注意的是,所输入的命令并不回显在屏幕上。若输入的字符不是vi命令,vi会响铃报警。

第二:文本输入模式:在命令模式下输入命令i、附加命令a、打开命令o、修改命令c、取代命令r或替换命令s都可以进入文本输入模式。在该模式下,用户输入的任何字符都被vi当作文件内容保护起来,并将其显示在屏幕上。在文本输入过程中,若想回到命令模式下,按ESC键即可。

第三:末行模式:末行模式也称ex转义模式。在命令模式下,用户按“:”键即可进入末行模式下,此时vi会在显示窗口的最后一行(通常也是屏幕的最后一行)显示一个“:”作为末行模式的说明符,等待用户输入命令。多数文件管理命令都是在此模式下执行的(如把编辑缓冲区的内容写到文件中等)。末行命令在执行完后,vi自动回到命令模式。如果要从命令模式转换到编辑模式,可以键入a或者i。如果需要从文本模式返回,则按ESC即可。在命令模式下输入“:”即可切换到末行模式,然后输入命令。

综上,一般我们使用命令打开文件的时候,是进入到命令模式。在命令模式下,可以切换到文本输入模式和末行模式,但是文本输入模式和末行模式之间是不可以直接相互切换了,因此文本输入模式切换到末行模式,需要先回到命令模式再切换,反之亦然。

此外,编辑文本可以在文本输入模式下,键盘输入对文编进行编辑,或者在命令模式下使用vi命令也是可以起到编辑效果的。

实例演示

首先我们使用命令 vi filename 打开一个文件,这个时候进入到的是命令模式
接下来我们按i,然后键盘随便输入写内容。
然后按ESC重新进入到命令模式。
在命令模式的情况下,我们按:,进入到了末行模式。
我们输入wq!,然后回车,强行保存退出。
下次我们再打开对应文件(可用less filename命令打开),即可看到内容已经更改。

补充:
(1)末行模式下:q! 【强制退出不保存】 q【退出不保存】 wq【退出并保存后面也可以加个!】
(2)如果你不想保存直接退出有可以在命令模式下使用“ctrl+z”快捷键或者按住“shift”键,输入两个z即可退出。

更多命令

进入vi的命令
vi filename :打开或新建文件,并将光标置于第一行首
vi +n filename :打开文件,并将光标置于第n行首
vi + filename :打开文件,并将光标置于最后一行首
vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处
vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复filename
vi filename….filename :打开多个文件,依次进行编辑

屏幕翻滚类命令
Ctrl+u:向文件首翻半屏
Ctrl+d:向文件尾翻半屏
Ctrl+f:向文件尾翻一屏
Ctrl+b;向文件首翻一屏
nz:将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。

插入文本类命令
i :在光标前
I :在当前行首
a:光标后
A:在当前行尾
o:在当前行之下新开一行
O:在当前行之上新开一行
r:替换当前字符
R:替换当前字符及其后的字符,直至按ESC键
s:从当前光标位置处开始,以输入的文本替代指定数目的字符
S:删除指定数目的行,并以所输入文本代替之
ncw或nCW:修改指定数目的字
nCC:修改指定数目的行

删除命令
ndw或ndW:删除光标处开始及其后的n-1个字
do:删至行首
d$:删至行尾
ndd:删除当前行及其后n-1行
x或X:删除一个字符,x删除光标后的,而X删除光标前的
Ctrl+u:删除输入方式下所输入的文本

搜索及替换命令
/pattern:从光标开始处向文件尾搜索pattern
?pattern:从光标开始处向文件首搜索pattern
n:在同一方向重复上一次搜索命令
N:在反方向上重复上一次搜索命令
:s/p1/p2/g:将当前行中所有p1均用p2替代
:n1,n2s/p1/p2/g:将第n1至n2行中所有p1均用p2替代
:g/p1/s//p2/g:将文件中所有p1均用p2替换

选项设置
all:列出所有选项设置情况
term:设置终端类型
ignorance:在搜索中忽略大小写
list:显示制表位(Ctrl+I)和行尾标志($)
number:显示行号
report:显示由面向行的命令修改过的数目
terse:显示简短的警告信息
warn:在转到别的文件时若没保存当前文件则显示NO write信息
nomagic:允许在搜索模式中,使用前面不带“\”的特殊字符
nowrapscan:禁止vi在搜索到达文件两端时,又从另一端开始
mesg:允许vi显示其他用户用write写到自己终端上的信息

末行模式命令
:n1,n2 co n3:将n1行到n2行之间的内容拷贝到第n3行下
:n1,n2 m n3:将n1行到n2行之间的内容移至到第n3行下
:n1,n2 d :将n1行到n2行之间的内容删除
:w :保存当前文件
:e filename:打开文件filename进行编辑
:x:保存当前文件并退出
:q:退出vi
:q!:不保存文件并退出vi
:!command:执行shell命令command
:n1,n2 w!command:将文件中n1行至n2行的内容作为command的输入并执行之,若不指定n1,n2,则表示将整个文件内容作为command的输入
:r!command:将命令command的输出结果放到当前行

寄存器操作
“?nyy:将当前行及其下n行的内容保存到寄存器?中,其中?为一个字母,n为一个数字
“?nyw:将当前行及其下n个字保存到寄存器?中,其中?为一个字母,n为一个数字
“?nyl:将当前行及其下n个字符保存到寄存器?中,其中?为一个字母,n为一个数字
“?p:取出寄存器?中的内容并将其放到光标位置处。这里?可以是一个字母,也可以是一个数字
ndd:将当前行及其下共n行文本删除,并将所删内容放到1号删除寄存器中。

2017-05-02 17:50:28 eleiza 阅读数 85154

vi有两个模式:一个是编辑一个是命令。我们从命令进入编辑为:i,o,a。一般使用的是i:因为这个我是最熟悉的。退出点击esc键,就进入命令模式。

我们需要删除文件的当前行和后一行,命令为:2dd,一般我们使用的是单个字符的删除为:x。我们一般进入编辑模式,来进行添加,修改,删除。

但是当我们删除和修改的内容过多的时候,我们使用命令行模式,进行修改,这样方便,快捷,而命令行中,最常用到的是x,dd,u,p这四个命令:

x:删除当前字符;

dd:删除当前行;

u:恢复前一步操作;

p:复制之前删除的行。


vi是Linux终端下或控制台下常用的编辑器,基本的操作方式为:vi /路径/文件名

  例如,vi /etc/saikik表示显示/etc/saikik文件的内容。使用键盘上的Page Up和Page Down键可以上下翻页;按下Insert键,可以见到窗口左下角有“Insert”字样,表示当前为插入编辑状态,这时从键盘输入的内容将插入到光标位置;再按下Insert键,左下角将有“Replace”字样,表示当前为替换编辑状态,这时从键盘输入的内容将替换光标位置的内容。编辑完内容后,按下Esc键,并输入“:wq”,然后回车就可以保存退出。

  如果不想保存而直接退出,则按下Esc键后,输入“:q!”,然后回车即可。“wq”表示Write和Quit,即保存退出;“q!”表示忽略修改强行退出。


2018-06-11 23:18:14 shenhaiyushitiaoyu 阅读数 51883

原理不多说。直接上手,以下以编辑xml文件为例进行讲解:

前言: 很多小伙伴私信我说有没有便宜的云服务器,云服务器其实还挺贵的,如果我们只是拿来练习,只能等搞活动才可以。腾讯云一般都会有新人99元一年服务器卖,可以考虑看下。我也是买那个的。

  1. 首先进入xml文件所在的目录:
    这里写图片描述

  2. 输入vi+ 文件名 如 vi test.xml
    这里写图片描述

  3. 打开文件后,如果你想查找,直接输入 / +你想要查找的字段 比如 /text-ro 然后回车就可以查找了,按n表示下一个匹配字符:
    这里写图片描述

  4. 点击键盘上的上下左右键进行移动光标(键盘上的箭头),也定位到你想编辑的地方。

  5. 移动到你编辑的地方后,点击x表示删除后面的字符,如果你要插入,按a就可以插入了,如:

这里写图片描述这里写图片描述

6.编辑后如下:
这里写图片描述
7.编辑完成,按esc就可以直接退出编辑状态了,然后输入:wq 表示保存
这里写图片描述
保存后的提示:
这里写图片描述

8.如果中途编辑想放弃不编辑了,那么直接ctrl+z就可以直接中断不保存了。
9.如果遇到下次进入发现有提示文件一打开,或者说有.wsp文件 存在的,那么直接使用
rm -rf 文件名删除即可。如:
这里写图片描述
直接删除:
这里写图片描述

下次再vi进入就没事了。

2018/06/23更新:
ctrl+z其实是挂起的意思,如果编辑错误直接就ctrl+z的话,后面进去还是会进入到打开的这个文档。以下是更好的处理方法:
1-正常退出,正常退出有个前提条件是:打开的文本文件在内容上没有被改动过,方法:按了ESC后再输入 :q
不保存退出:修改后不想保存退出的方法:先按ESC,再输入冒号,在输入命令时,直接输入q! 然后enter
查看文件是否更改了,可以输入 cat 文件名 如cat test.xml

linux下修改文件内容

阅读数 11430