sed
sed从文件中读取数据,如果没有输入文件,则默认对标准输入进程数据进行处理,脚本指令是第一个非“-”开头的参数,具体语法格式如下:
[dmtsai@study ~]$ 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’
function :
a :新增, a 的后面可以接字符串,而这些字符串会在新的一行出现(目前的下一行)
c :取代, c 的后面可以接字符串,这些字符串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字符串,而这些字符串会在新的一行出现(目前的上一行);
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运作
s :默认情况下,sed将把输入的多个文件名作为一个长的连续的输入流,而GNU sed则允许把它们当作单独的文件
例一:将样本文件中的所有yes替换为no:
sed 's/yes/no/g' test.txt
例二:第三行前追加three:
sed '3i three' test.txt
例三:匹配到包含text的行,并在其后添加pass
sed '/text/a pass' test.txt
例四:匹配text开始的行,并删除该行
sed '/^test/d' test.txt
sort
sort可以依据不同的数据型态来排序
[dmtsai@study ~]$ sort [-fbMnrtuk] [file or stdin]
选项与参数:
-f :忽略大小写的差异,例如 A 与 a 视为编码相同;
-b :忽略最前面的空格符部分;
-M :以月份的名字来排序,例如 JAN, DEC 等等的排序方法;
-n :使用『纯数字』进行排序(默认是以文字型态来排序的);
-r :反向排序;
-u :就是 uniq ,相同的数据中,仅出现一行代表;
-t :分隔符,预设是用 [tab] 键来分隔;
-k :以那个区间 (field) 来进行排序的意思
-d:排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
例一:对/etc/passwd,先以第六个域的第2个字符到第4个字符进行正向排序,再基于第一个域进行反向排序
cat /etc/passwd | sort -t':' -k 6.2,6.4 -k 1r
例二:查看/etc/passwd有多少个shell:对/etc/passwd的第七个域进行排序,然后去重
cat /etc/passwd | sort -t':' -k 7 -u
uniq
uniq用于去除有序文件中的重复行并将结果输出到标准输出。uniq经常和sort合用,为了使uniq起作用,所有的重复行必须是相邻的。
[dmtsai@study ~]$ uniq [-ic]
选项与参数:
-i :忽略大小写字符的不同;
-c :进行计数
-c,--count:显示行出现的次数
-d,--repeated:仅显示重复出现的行,即出现次数>=2的行,且只打印一次
-D,--all-repeated[=delimit-method]:仅显示重复的行,且打印重复行的所有行。
其中delimit-method表示对重复行集合的分隔方式
uniq只会找出相邻的重复行,若想找出文件内所有重复行,需先使用sort排序
cat testfile | sort | uniq
wc
wc [-lwm]
选项与参数:
-l :仅列出行;
-w :仅列出多少字(英文单字);
-m :多少字符;
例:查看 /etc/man_db.conf 里面到底有多少相关字、行、字符数
cat /etc/man_db.conf | wc
131 723 5171
#输出的三个数字中,分别代表: 『行、字数、字符数』
find
find path -option [-print ] [-exec -ok |xargs |grep ] [command {} \;]
find命令的参数:
1)path:要查找的目录路径。
~ 表示$HOME目录
. 表示当前目录
/ 表示根目录
2)print:表示将结果输出到标准输出。
3)exec:对匹配的文件执行该参数所给出的shell命令。
形式为command {} ;,注意{}与;之间有空格
4)ok:与exec作用相同,
区别在于,在执行命令之前,都会给出提示,让用户确认是否执行
5)|xargs 与exec作用相同 ,起承接作用
区别在于 |xargs 主要用于承接删除操作 ,而 -exec 都可用 如复制、移动、重命名等
6)options :表示查找方式
options常用的有下选项:
-name filename #查找名为filename的文件
-perm #按执行权限来查找
-user username #按文件属主来查找
-group groupname #按组来查找
-mtime -n +n #按文件更改时间来查找文件,-n指n天以内,+n指n天以前
-atime -n +n #按文件访问时间来查找文件,-n指n天以内,+n指n天以前
-ctime -n +n #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
-nogroup #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser #查无有效属主的文件,即文件的属主在/etc/passwd中不存
-type b/d/c/p/l/f #查是块设备、目录、字符设备、管道、符号链接、普通文件
-size n[c] #查长度为n块[或n字节]的文件
-mount #查文件时不跨越文件系统mount点
-follow #如果遇到符号链接文件,就跟踪链接所指的文件
-prune #忽略某个目录
例一:将过去系统上面 24 小时内有更动过内容 (mtime) 的文件列出
find / -mtime 0
例二:寻找 /etc 底下的文件,如果文件日期比 /etc/passwd 新就列出
find /etc -newer /etc/passwd
例三:搜寻 /home 底下属于 dmtsai 的文件
find /home -user dmtsai
例四:搜寻系统中不属于任何人的文件
find / -nouser
例五:找出文件名包含了 passwd 这个关键词的文件
find / -name "*passwd*"
例六:找出 /run 目录下,文件类型为 Socket 的文件
find /run -type f
例七:搜寻文件当中含有 SGID 或 SUID 或 SBIT 的属性
find / -perm /7000
grep & cut
grep
grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
grep [-acinv] [--color=auto] '搜寻字符串' filename
选项与参数:
-a :将 binary 文件以 text 文件的方式搜寻数据
-c :计算找到 '搜寻字符串' 的次数
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!
--color=auto :可以将找到的关键词部分加上颜色的显示
例一:将 last 当中,有出现 root 的那一行就取出来
last | grep 'root'
例二:与例一相反,只要没有 root 的就取出
last | grep -v 'root'
例三:在 last 的输出讯息中,只要有 root 就取出,并且仅取第一栏
last | grep 'root' |cut -d ' ' -f1
例四:取出 /etc/man_db.conf 内含 MANPATH 的那几行,并加上颜色
grep --color=auto 'MANPATH' /etc/man_db.conf
cut
cut 主要的用途在于将同一行里面的数据进行分解
cut -d'分隔字符' -f fields
cut -c 字符区间
选项与参数:
-d :后面接分隔字符。与 -f 一起使用;
-f :依据 -d 的分隔字符将一段讯息分区成为数段,用 -f 取出第几段的意思;
-c :以字符 (characters) 的单位取出固定字符区间;