Linux 命令 sed,sort,uniq,wc,find,grep,cut,awk

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 functionfunction :
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) 的单位取出固定字符区间;

awk

linux awk 命令 | 菜鸟教程

猜你喜欢

转载自blog.csdn.net/qq_43310387/article/details/123993455