只介绍命令和对应的功能,详细用法可针对性的自行搜索
管线命令基本上都是对文本进行截取的功能,据我观察,他们基本上会以行为单位。
以下命令都可以用在管道上,但是有些也可以单独使用。
以下演示的文件是用last | head -n 12 > lastfile
命令得到的。
1、cut:对文本进行截取
参数:
-d:对文本按照指定的符号进行分片,然后显示指定的部分分片
-c:以字符为单位去除固定字符区间
举例:
cat lastfile | cut -d ':' -f 3
cat lastfile | cut -c 2-
2、grep:对文本进行过滤
参数:
无参时:显示所有带有指定字符串的行,并对指定字符串高亮
-c:只计算指定字符串的次数
-i:忽略大小写
举例:
cat lastfile | grep 'down'
3、sort:以指定规则对文本进行排序,以行为单位
参数:
无参时:按照每行前面的字母进行排序
-f:忽略大小写
-t:可以指定分隔符按照指定的分片进行排序,默认为tab
举例:
cat lastfile | sort -t '-' -k 2
4、uniq:去重
参数:
-i:忽略大小写
-c:计数
举例:
cat lastfile | cut -d ' ' -f 1 | sort | uniq -c
5、wc:计算行数,字符数
参数:
无参时:全计算
-l:仅计算行数
-w:仅计算英文字数,以四个字符为一个字
-m:计算总字符数,会把换行符当作一个字符计算
举例:
cat lastfile | wc
6、tee:转存
参数:
-a:以累加形式写入文件
举例:
cat lastfile | tee -a lfile | cut -d ':' -f 3
7、tr:删除或者替换指定字符,不能改变字符串
参数:
-d:删除指定字符串
-s:指定一个字符删除该字符相邻的相同字符,或者指定两个字符用后边的字符取代前边的字符或者重复字符串
举例:
cat lastfile | tr 'r' 'd'
cat lastfile | tr -d ':'
cat lastfile | tr -s 'o' 'i'
cat lastfile | tr -s 'o'
8、col:将tab按键边冲空白键,基本上用来转码之类的
9、join:两个文件当中,有 “相同数据” 的那一行,才将他加在一起,要求文件已排序
参数:
无参时:以tab键位分隔符
-t:可以指定字符进行分隔
-i:忽略大小写
-1:指定文件1中用于连接的字段号
-2:指定文件2中用于连接的字段号
举例:
join -t ':' -1 4 /etc/passwd -2 3 /etc/group | head -n 3
10、paste:直接将两行粘在一起
参数:
-d:指定分隔符,默认是制表符
- :表示来自标准输入
举例:
paste -d '@' lastfile lfile
paste -d '@' lastfile -
11、expand:将制表符转为空格
unexpand:将空格转为制表符
12、split:把一个大文件分割成多个小文件
参数:
-b:指定分区的文件大小,后可跟单位:b,k,m等
-l:以行数进行分区
prefix:可指定小文件的文件名前缀
举例:
split -b 10k lastfile prefix
split -l 2 lastfile prefix
13、xargs:可以让无法使用管道符的命令使用管道符
参数:
-0 :如果输入的 stdin 含有特殊字符,例如 `, , 空白键等等字符时,这个 -0 参数可以将他还原成一般字符。这个参数可以用于特殊状态喔!
-e :这个是 EOF (end of file) 的意思。后面可以接一个字串,当 xargs 分析到这个字串时,就会停止继续工作!
-p :在执行每个指令的 argument 时,都会询问使用者的意思;
-n :后面接次数,每次 command 指令执行时,要使用几个参数的意思。
当 xargs 后面没有接任何的指令时,默认是以 echo 来进行输出!
举例:
find /usr/sbin -perm /7000 | ls -l #这样的话ls 也会执行,但是跟前面的无法关联上,管道符前后的两个命令各自执行
find /usr/sbin -perm /7000 | xargs ls -l #这样的话就可以用ls -l查看前面查询结果的具体信息
14、-:减号可以当作管道前后的一个替代符,有时候管道前输入的东西需要在命令中间,管道后无法直接接受并处理
举例:
tar -cvf - /home | tar -xvf - -C /tmp/homeback
15、sed:搜寻、删除和修改文件内容
这是一个很强大的命令
sed [-nefr] [动作]
参数:
-n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到屏幕上。但如果加上 -n 参数后,则只有经过 sed 特殊处理的那一行(或者动作)才会被列出来。
-e :直接在命令行界面上进行 sed 的动作编辑;
-f :直接将 sed 的动作写在一个文件内, -f filename 则可以执行 filename 内的 sed 动作;
-r :sed 的动作支持的是延伸型正则表达式的语法。(默认是基础正则表达式语法)
-i :直接修改读取的文件内容,而不是由屏幕输出。
动作说明: [n1[,n2]]function
n1, n2 :不见得会存在,一般代表“选择进行动作的行数”,举例来说,如果我的动作是需要在 10 到 20 行之间进行的,则“ 10,20[动作行为] ”function 有下面这些咚咚:
a:新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c:取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d:删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i:插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p:打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s:取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正则表达式!例如 1,20s/要被取代的字串/新的字串/g
举例:
nl lastfile | sed '2,5d'
:删除第2~5行,d就是删除的意思
nl lastfile | sed '2,5c characters of replace'
:用characters of replace取代2~5行的所有内容
sed -i '2,5c characters of replace' lastfile
:直接修改源文件