虽然在shell脚本中可以使用任意的unix命令,但是还是由一些相对更常用的命令。这些命令通常是用来进行文件和文字操作的。
常用命令语法及功能
(1)echo"some text": 将文字内容打印在屏幕上
(2)ls: 文件列表
(3)wc
wc –l file
wc-w file
wc -c file:
计算文件行数计算文件中的单词数计算文件中的字符数
语 法:wc [-clw][--help][--version][文件…]
补充说明:利用wc指令我们可以计算文件的Byte数、字数、或是列数,若不指定任何文件名称,或是所给予的文件名为"-",则wc指令会从标准输入设备读取数据。假设不给予其参数,wc指令会一并显示列数、字数和Byte数
参 数:
-c 只显示Byte数,亦即字符数;
-l 只显示列数;-w 只显示字数;
--help 在线帮助;
--version 显示版本信息。
范 例:
计算文本文件TopGun的列数、字数和字符数:
$ wc TopGun
$ wc -l *.c 列出该文件夹下所有.c文件的行数,及所有文件的总行数
(4)cp sourcefile destfile: 文件拷贝
(5)mv oldname newname : 重命名文件或移动文件
(6)rm file: 删除文件
(7)grep 'pattern' file: 在文件内搜索字符串比如:grep'searchstring' file.txt
-------------------------------------------------------
shell中,查看文件行数的相关命令:假定文件名为file
方法1:
# awk 'END{print NR}' file
方法2:
wc -l file | awk '{print $1}'
方法3:
wc -l file | sed 's/\([0-9]\).*/\1/'
另外,有时需要最后一行的数字:
# awk 'END{print $1}' file
----------------------------------------------------------
(8)cut -b colnum file:
cut命令用于从文件或者标准输入中读取内容并截取每一行的特定部分并送到标准输出。比如:
输出每行第5个到第9个字符
cut -b5-9 file.txt
语法格式为:
cut [-bn] [file] 或 cut [-c] [file] 或 cut [-df] [file]
如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。
主要参数
-b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
-c :以字符为单位进行分割。
-d :自定义分隔符,默认为制表符。
-f :与-d一起使用,指定显示哪个区域。
-n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的<br />范围之内,该字符将被写出;否则,该字符将被排除。
例如
cut -d ' ' -f2 coord.txt
千万不要和cat命令混淆,这是两个完全不同的命令
(9)cat
cat file.txt: 输出文件内容到标准输出设备(屏幕)上
使用方式:cat [-AbeEnstTuv] [--help] [--version] fileName
说明:把档案串连接后传到基本输出
参数:
-n 或 --number 由 1 开始对所有输出的行数编号
-b 或 --number-nonblank 和 -n 相似,只不过对于空白行不编号
-s 或 --squeeze-blank 当遇到有连续两行以上的空白行,就代换为一行的空白行
-v 或 --show-nonprinting
范例:
cat -n textfile1 > textfile2 把 textfile1 的档案内容加上行号后输入 textfile2 这个档案里
cat -b textfile1 textfile2 >> textfile3 把 textfile1 和 textfile2 的档案内容加上行号(空白行不加)之后将内容附加到 textfile3 里。
(10)file somefile: 得到文件类型
(11)read var: 提示用户输入,并将输入赋值给变量
(12)sort
sort file.txt: 对file.txt文件中的行进行排序
功能说明:
sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。
语法:
sort [-bcdfimMnr][-o<输出文件>][-t<分隔字符>][+<起始栏位>-<结束栏位>][--help][--verison][文件]
参 数:
-b 忽略每行前面开始出的空格字符。
-c 检查文件是否已经按照顺序排序。
-d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
-f 排序时,将小写字母视为大写字母。
-g, --general-numeric-sort compare according to general numerical value
此时,13比3大
-i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
-k 指定列数
-m 将几个排序好的文件进行合并。
-M 将前面3个字母依照月份的缩写进行排序。
-n 依照数值的大小排序。
-o<输出文件> 将排序后的结果存入指定的文件。
-r 以相反的顺序来排序。
-s, --stable stabilize sort by disabling last-resort comparison
-t<分隔字符> 指定排序时所用的栏位分隔字符。
+<起始栏位>-<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
--help 显示帮助。
--version 显示版本信息
例子:
sort -n -k 2 facebook.txt
(13)uniq:
删除文本文件中相邻重复出现的行
比如: sort file.txt | uniq
uniq的作用是过滤重复部分显示文件内容,这个命令读取输入文件,并比较相邻的行。在正常情况下,第二个及以后更多个重复行将被删去,行比较是根据所用字符集的排序序列进行的。该命令加工后的结果写到输出文件中。输入文件和输出文件必须不同。如果输入文件用“- ”表示,则从标准输入读取。
uniq [选项] 文件
各选项含义如下:
– c 显示输出中,在每行行首加上本行在文件中出现的次数。它可取代- u和- d选项。
– d 只显示重复行。
– u 只显示文件中不重复的各行。
– n 前n个字段与每个字段前的空白一起被忽略。一个字段是一个非空格、非制表符的字符串,彼此由制表符和空格隔开(字段从0开始编号)。
+n 前n个字符被忽略,之前的字符被跳过(字符从0开始编号)。
– f n 与- n相同,这里n是字段数。
– s n 与+n相同,这里n是字符数。
例如:
uniq -c uniq.txt
(14)expr: 进行数学运算Example: add 2 and 3expr 2"+" 3
(15)find: 搜索文件比如:根据文件名搜索find . -name filename-print
(16)tee: 将数据输出到标准输出设备(屏幕) 和文件比如:somecommand | tee outfile
(17)basename file: 返回不包含路径的文件名
比如:basename /bin/tux将返回 tux
(18)dirname file: 返回文件所在路径比如:dirname/bin/tux将返回 /bin
(19)head file: 打印文本文件开头几行
(20)tail file : 打印文本文件末尾几行
1.如果你只想看文件的前5行,可以使用head命令,如:
head -5 /etc/passwd
2. 如果你想查看文件的后10行,可以使用tail命令,如:
tail -10 /etc/passwd 或 tail -n 10/etc/passwd
3. 查看文件中间一段,你可以使用sed命令,如:
sed -n '5,10p' /etc/passwd
这样你就可以只查看文件的第5行到第10行。
tail语法格式:
tail [ -f ] [ -c Number | -n Number | -m Number | -b Number | -k Number ] [ File ]
或者
tail [ -r ] [ -n Number ] [ File ]
使用说明:
tail 命令从指定点开始将 File 参数指定的文件写到标准输出。如果没有指定文件,则会使用标准输入。 Number 变量<br />指定将多少单元写入标准输出。 Number 变量的值可以是正的或负的整数。如果值的前面有 +(加号),从文件开头<br />指定的单元数开始将文件写到标准输出。如果值的前面有 -(减号),则从文件末尾指定的单元数开始将文件写到<br />标准输出。如果值前面没有 +(加号)或 -(减号),那么从文件末尾指定的单元号开始读取文件。
主要参数:
-b Number 从 Number 变量表示的 512 字节块位置开始读取指定文件。
-c Number 从 Number 变量表示的字节位置开始读取指定文件。
-f 如果输入文件是常规文件或如果 File 参数指定 FIFO(先进先出),
那么 tail 命令不会在复制了输入文件的最后的指定单元后终止,而是继续
从输入文件读取和复制额外的单元(当这些单元可用时)。如果没有指定 File 参数,
并且标准输入是管道,则会忽略 -f 标志。tail -f 命令可用于监视另一个进程正在
写入的文件的增长。
-k Number 从 Number 变量表示的 1KB 块位置开始读取指定文件。
-m Number 从 Number 变量表示的多字节字符位置开始读取指定文件。使用该标志提供在
单字节和双字节字符代码集环境中的一致结果。
-n Number 从首行或末行位置来读取指定文件,位置由 Number 变量的符号(+ 或 - 或无)表示,并通过行号 Number 进行位移。
-r 从文件末尾以逆序方式显示输出。-r 标志的缺省值是以逆序方式显示整个文件。
如果文件大于 20,480 字节,那么-r标志只显示最后的 20,480 字节。 -r 标志只有
与 -n 标志一起时才有效。否则,就会将其忽略。
(21)unset :shell内建指令,删除变量或函数。
语 法:unset [-fv][变量或函数名称]
参 数:
-f 仅删除函数。
-v 仅删除变量。
(22)sed: Sed是一个基本的查找替换程序。可以从标准输入(比如命令管道)读入文本,并将结果输出到标准输出(屏幕)。该命令采用正则表达式(见参考)进行搜索。不要和shell中的通配符相混淆。比如:将linuxfocus替换为 LinuxFocus:cat text.file| sed 's/linuxfocus/LinuxFocus/' > newtext.file
(23)awk: awk 用来从文本文件中提取字段。缺省地,字段分割符是空格,可以使用-F指定其他分割符。cat file.txt | awk -F,'{print $1 "," $3 }'这里我们使用,作为字段分割符,同时打印第一个和第三个字段。如果该文件内容如下: Adam Bor, 34, IndiaKerry Miller, 22, USA命令输出结果为:Adam Bor, IndiaKerry Miller
(24)shift:
将存放在位置变量中的命令行参数,依次向左传递.例如位置变量当前值为:
$1=file1 $2=file2 $3=file3
执行一次shift命令后,位置变量的值为:
$1=file2 $2=file3
(25)seq
用于产生从某个数到另外一个数之间的所有数
例一:
# seq 1 10
结果是1 2 3 4 5 6 7 8 9 10
例二:
#!/bin/bash
for i in `seq 1 0.1 10`;
do
echo $i;
done
或者用
for i in $(seq 1 10)
可见,从1循环到100的两种方法(bash)
for x in `seq 1 100`;do echo $x;donefor x in {1..100};do echo $x;done
(26) paste
该命令主要用来将多个文件的内容合并,与cut命令完成的功能刚好相反。
使用事例:
$ cat names
Tony
Emanuel
Lucy
$ cat numbers
(307) 555-5356
(212) 555-3456
(212) 555-9959
$ paste names numbers
将两个文件合并,他们中间用tab键分隔开
Tony (307) 555-5356
Emanuel (212) 555-3456
Lucy (212) 555-9959
$ paste -s names 将多行数据合并到一行,他们间用tab键隔开
Tony Emanuel Lucy