Linux wc命令用于计算字数。
利用wc指令我们可以计算文件的Byte数、字数、或是列数,若不指定文件名称、或是所给予的文件名为"-",则wc指令会从标准输入设备读取数据。
wc [-clw][--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 today’s 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 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
Linux uniq 命令用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用。
uniq 可检查文本文件中重复出现的行列。
uniq [-cdu][-f<栏位>][-s<字符位置>][-w<字符位置>][--help][--version][输入文件][输出文件]
参数:
文件testfile中第 2、3、5、6、7、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 -c testfile #删除重复行后的内容 3 test 30 #前面的数字的意义为该行共出现了3次 4 Hello 95 #前面的数字的意义为该行共出现了4次 2 Linux 85 #前面的数字的意义为该行共出现了2次当重复的行并不相邻时,uniq 命令是不起作用的,即若文件内容为以下时,uniq 命令不起作用:
$ cat testfile1 # 原有内容 test 30 Hello 95 Linux 85 test 30 Hello 95 Linux 85 test 30 Hello 95 Linux 85
这时我们就可以使用 sort:
$ sort testfile1 | uniq Hello 95 Linux 85 test 30
统计各行在文件中出现的次数:
$ sort testfile1 | uniq -c 3 Hello 95 3 Linux 85 3 test 30
在文件中找出重复的行:
$ sort testfile1 | uniq -d Hello 95 Linux 85 test 30
expr命令是一个手工命令行计数器,用于在UNIX/LINUX下求表达式变量的值,一般用于整数值,也可用于字符串。
expr 表达式
表达式说明:
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
Linux tr 命令用于转换或删除文件中的字符。
tr 指令从标准输入设备读取数据,经过字符串转译后,将结果输出到标准输出设备。
tr [-cdst][--help][--version][第一字符集][第二字符集] tr [OPTION]…SET1[SET2]
参数说明:
字符集合的范围:
将文件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 today’s 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 TODAY’S 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 TODAY’S 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.
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
Linux sort 命令用于将文本文件内容加以排序。
sort 可针对文本文件的内容,以行为单位来排序。
sort [-bcdfimMnr][-o<输出文件>][-t<分隔字符>][+<起始栏位>-<结束栏位>][--help][--verison][文件][-k field1[,field2]]
参数说明:
在使用 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
使用 -k 参数设置对第二列的值进行重排,结果如下:
$ sort testfile -k 2 test 30 Linux 85 Hello 95
Linux sed 命令是利用脚本来处理文本文件。
sed 可依照脚本的指令来处理、编辑文本文件。
Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。
sed [-hnV][-e<script>][-f<script文件>][文本文件]
参数说明:
动作说明:
我们先创建一个 testfile 文件,内容如下:
$ cat testfile #查看testfile 中的内容 HELLO LINUX! Linux is a free unix-type opterating system. This is a linux testfile! Linux test Google Taobao Runoob Tesetfile Wiki
在 testfile 文件的第四行后添加一行,并将结果输出到标准输出,在命令行提示符下输入如下命令:
sed -e 4a\newLine testfile
使用 sed 命令后,输出结果如下:
$ sed -e 4a\newLine testfile HELLO LINUX! Linux is a free unix-type opterating system. This is a linux testfile! Linux test newLine Google Taobao Runoob Tesetfile Wiki
将 testfile 的内容列出并且列印行号,同时,请将第 2~5 行删除!
$ nl testfile | sed '2,5d' 1 HELLO LINUX! 6 Taobao 7 Runoob 8 Tesetfile 9 Wiki
sed 的动作为 2,5d,那个 d 是删除的意思,因为删除了 2-5 行,所以显示的数据就没有 2-5 行了, 另外,原本应该是要下达 sed -e 才对,但没有 -e 也是可以的,同时也要注意的是, sed 后面接的动作,请务必以 '...' 两个单引号括住喔!
只要删除第 2 行:
$ nl testfile | sed '2d' 1 HELLO LINUX! 3 This is a linux testfile! 4 Linux test 5 Google 6 Taobao 7 Runoob 8 Tesetfile 9 Wiki
要删除第 3 到最后一行:
$ nl testfile | sed '3,$d' 1 HELLO LINUX! 2 Linux is a free unix-type opterating system.
在第二行后(即加在第三行) 加上drink tea? 字样:
$ nl testfile | sed '2a drink tea' 1 HELLO LINUX! 2 Linux is a free unix-type opterating system. drink tea 3 This is a linux testfile! 4 Linux test 5 Google 6 Taobao 7 Runoob 8 Tesetfile 9 Wiki
如果是要在第二行前,命令如下:
$ nl testfile | sed '2i drink tea' 1 HELLO LINUX! drink tea 2 Linux is a free unix-type opterating system. 3 This is a linux testfile! 4 Linux test 5 Google 6 Taobao 7 Runoob 8 Tesetfile 9 Wiki
如果是要增加两行以上,在第二行后面加入两行字,例如 Drink tea or ..... 与 drink beer?
$ nl testfile | sed '2a Drink tea or ......\ drink beer ?' 1 HELLO LINUX! 2 Linux is a free unix-type opterating system. Drink tea or ...... drink beer ? 3 This is a linux testfile! 4 Linux test 5 Google 6 Taobao 7 Runoob 8 Tesetfile 9 Wiki
每一行之间都必须要以反斜杠 \ 来进行新行标记。上面的例子中,我们可以发现在第一行的最后面就有 \ 存在。
将第 2-5 行的内容取代成为 No 2-5 number 呢?
$ nl testfile | sed '2,5c No 2-5 number' 1 HELLO LINUX! No 2-5 number 6 Taobao 7 Runoob 8 Tesetfile 9 Wiki
透过这个方法我们就能够将数据整行取代了。
仅列出 testfile 文件内的第 5-7 行:
$ nl testfile | sed -n '5,7p' 5 Google 6 Taobao 7 Runoob
可以透过这个 sed 的以行为单位的显示功能, 就能够将某一个文件内的某些行号选择出来显示。
搜索 testfile 有 oo 关键字的行:
$ nl testfile | sed -n '/oo/p' 5 Google 7 Runoob
如果 root 找到,除了输出所有行,还会输出匹配行。
删除 testfile 所有包含 oo 的行,其他行输出
$ nl testfile | sed '/oo/d' 1 HELLO LINUX! 2 Linux is a free unix-type opterating system. 3 This is a linux testfile! 4 Linux test 6 Taobao 8 Tesetfile 9 Wiki
搜索 testfile,找到 oo 对应的行,执行后面花括号中的一组命令,每个命令之间用分号分隔,这里把 oo 替换为 kk,再输出这行:
$ nl testfile | sed -n '/oo/{s/oo/kk/;p;q}' 5 Gkkgle
最后的 q 是退出。
除了整行的处理模式之外, sed 还可以用行为单位进行部分数据的查找与替换<。
sed 的查找与替换的与 vi 命令类似,语法格式如下:
sed 's/要被取代的字串/新的字串/g'将 testfile 文件中每行第一次出现的 oo 用字符串 kk 替换,然后将该文件内容输出到标准输出:
sed -e 's/oo/kk/' testfile
g 标识符表示全局查找替换,使 sed 对文件中所有符合的字符串都被替换,修改后内容会到标准输出,不会修改原文件:
sed -e 's/oo/kk/g' testfile
选项 i 使 sed 修改文件:
sed -i 's/oo/kk/g' testfile
批量操作当前目录下以 test 开头的文件:
sed -i 's/oo/kk/g' ./test*
接下来我们使用 /sbin/ifconfig 查询 IP:
$ /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 前面的部分予以删除:
$ /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 后面的部分予以删除:
$ /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' | sed 's/Bcast.*$//g' 192.168.1.100
一条 sed 命令,删除 testfile 第三行到末尾的数据,并把 HELLO 替换为 RUNOOB :
$ nl testfile | sed -e '3,$d' -e 's/HELLO/RUNOOB/' 1 RUNOOB LINUX! 2 Linux is a free unix-type opterating system.
-e 表示多点编辑,第一个编辑命令删除 testfile 第三行到末尾的数据,第二条命令搜索 HELLO 替换为 RUNOOB。
sed 可以直接修改文件的内容,不必使用管道命令或数据流重导向! 不过,由于这个动作会直接修改到原始的文件,所以请你千万不要随便拿系统配置来测试! 我们还是使用文件 regular_express.txt 文件来测试看看吧!
regular_express.txt 文件内容如下:
$ cat regular_express.txt runoob. google. taobao. facebook. zhihu- weibo-
利用 sed 将 regular_express.txt 内每一行结尾若为 . 则换成 !
$ sed -i 's/\.$/\!/g' regular_express.txt $ cat regular_express.txt runoob! google! taobao! facebook! zhihu- weibo-:q:q
利用 sed 直接在 regular_express.txt 最后一行加入 # This is a test:
$ sed -i '$a # This is a test' regular_express.txt $ cat regular_express.txt runoob! google! taobao! facebook! zhihu- weibo- # This is a test
由於 $ 代表的是最后一行,而 a 的动作是新增,因此该文件最后新增 # This is a test!
sed 的 -i 选项可以直接修改文件内容,这功能非常有帮助!举例来说,如果你有一个 100 万行的文件,你要在第 100 行加某些文字,此时使用 vim 可能会疯掉!因为文件太大了!那怎办?就利用 sed 啊!透过 sed 直接修改/取代的功能,你甚至不需要使用 vim 去修订!
Linux rgrep命令用于递归查找文件里符合条件的字符串。
rgrep指令的功能和grep指令类似,可查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设rgrep指令会把含有范本样式的那一列显示出来。
rgrep [-?BcDFhHilnNrv][-R<范本样式>][-W<列长度>][-x<扩展名>][--help][--version][范本样式][文件或目录...]
参说明数:
在当前目录下查找句子中包含"Hello"字符串的文件,可使用如下命令:
rgrep Hello *
其搜索结果如下:
$ rgrep Hello * #在当前目录下查找句子中包含“Hello”字符串的文件 testfile_1:Hello 95 #testfile_1中包含“Hello”字符串的句子 testfile_2:Hello 2005 #testfile_2中包含“Hello”字符串的句子
Linux pico命令用于编辑文字文件。
pico是个简单易用、以显示导向为主的文字编辑程序,它伴随着处理电子邮件和新闻组的程序pine而来。
pico [-bdefghjkmqtvwxz][-n<间隔秒数>][-o<工作目录>][-r<编辑页宽>][-s<拼字检查器>][+<列数编号>][文件]
参数说明:
使用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 拼写检查
mtype为mtools工具指令,模拟MS-DOS的type指令,可显示MS-DOS文件的内容。
mtype [-st][文件]
参数说明:
打开名为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 today’s 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.