• sed
  • awk
  • grep
  • 正则表达式
  • 命令大全
  • 运算符
  • 流程控制
  • 特殊符号
[root@localhost ~] # sed [选项] '[动作]' 文件名
选项:
-n:一般 sed 命令会把所有数据都输出到屏幕上。如果加入此选项,则只会把经过 sed 命令处理的行输出到屏幕上;
-e: 允许对输入数据应用多条 sed 命令编辑;
-f 脚本文件名:从 sed 脚本中读入 sed 操作。和 awk 命令的 -f 选项非常类似;
-r:在 sed 中支持扩展正则表达式;
-i:用 sed 的修改结果直接修改读取数据的文件,而不是由屏幕输出动作;
a \:追加,在当前行后添加一行或多行。当添加多行时,除最后一行外,每行末尾需要用“\”代表数据未完结;
c \:行替换,用c后面的字符串替换原数据行。当替换多行时,除最后一行外,每行末尾需用“\”代表数据未完结;
i \:插入,在当前行前插入一行或多行。当插入多行时,除最后一行外,每行末尾需要用“\”代表数据未完结;
d:删除,删除指定的行;
P:打印,输出指定的行;
s:字符串替换,用一个字符串替换另一个字符串。格式为“行范围s/旧字串/新字串/g”(和Vim中的替换格式类似);

[实例]
对文件进行搜索替换操作
语法:sed 选项 ‘s/搜索的内容/替换的内容/动作’ 需要处理的文件
[root@localhost ~]# sed -i 's/原字符串/替换字符串/g' filename
其中,s表示search搜索;斜杠/表示分隔符,可以自己定义;动作一般是打印p和全局替换g

[root@localhost ~]# sed -n '2p' student.txt 打印第二行数据

awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
    命令行方式 awk [-F  field-separator] 'commands' input-file(s)

    其中,commands 是真正awk命令,[-F域分隔符]是可选的。 input-file(s) 是待处理的文件。

    在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域。通常,在不指名-F域分隔符的情况下,默认的域分隔符是空格。

【实例】
 假设last -n 5的输出如下
如果只是显示最近登录的5个帐号

#last -n 5 | awk '{print $1}'

awk工作流程是这样的:读入有'\n'换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域。默认域分隔符是"空白键" 或 "[tab]键",所以$1表示登录用户,$3表示登录用户ip,以此类推。
[root@www ~]# grep [-acinv] [--color=auto] '搜寻字符串' filename

选项与参数:

-a :将 binary 文件以 text 文件的方式搜寻数据

-c :计算找到 '搜寻字符串' 的次数

-i :忽略大小写的不同,所以大小写视为相同

-n :顺便输出行号

-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!

--color=auto :可以将找到的关键词部分加上颜色的显示喔!
    【实例】
将/etc/passwd,有出现 root 的行取出来

# grep root /etc/passwd
\ :转义字符,用于取消特殊符号的含义,例: !、\n、$等
^ :匹配字符串开始的位置,例: ^a、 ^the、 #、[a-z]
$ :匹配字符串结束的位置,例: word$、^$匹配空行
. :匹配除\n之外的任意的一个字符,例: go.d、 g…d
* :匹配前面子表达式0次或者多次,例: goo*d、 go.*d
[list] :匹配list列表中的一个字符,例: go[ola]d, [abc]、 [a-z]、 [a-z0-9]、 [0-9]匹配任意一位数字
[^list] :匹配任意非list列表中的一个字符,例: [^0-9]、 [^A-Z0-9]、 [^a-z]匹配任意一位非小写字母
\{n\} :匹配前面的子表达式n次,例: go{2}d、 '[0-9]{2} '匹配两位数字 例如grep "a\{3\}" test.txt
\{n,\} :匹配前而的子表达式不少于n次,例: go{2, }d、’[0-9]{2, }'匹配两位及两位以上数字
\{n,m\}: 匹配前面的子表达式n到m次,例: go{2,3}d、'[0-9]{2,3}'匹配两位到三位数字
注:egrep、awk使用{n}、{n,}、{n,m}匹配时"{}"前面不用加"\"

    例子:
    1. 匹配日期格式 YYYY-MM-DD

    [0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}

    2. 匹配IP地址

    [0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\

【常用】
    last -n 10 查看最近登陆系统的用户及IP
    wc -c -l 统计字符数和行数
    history查看历史命令
    cut字段截取命令 cut -d ":" -f 1 /etc/passwd
    sort file.txt 排序输出 加-r降序输出
    ll -h 通常以M G显示文件大小 同ls -alh
    du -h /etc  统计etc文件夹下文件的大小
    dd if=/dev/mem of=/root/mem.bin bs=1024(指定块大小为1k) 拷贝内存内容
    free -h 显示内存信息
    cat /proc/cpuinfo 查看CPU信息
    df -h 显示磁盘信息
    top 相当于任务管理器
    ps aux 打印出所有进程
    date +%F 显示日期
    rpm -qa 查看安装的包
    cat /etc/redhat-release 查看Linux版本
    uname -a 查看内核版本
    watch -n 5 每5秒执行一次任务
    jobs 查看当前有多少在后台运行的命令

【echo】
    echo "It is a test"
    echo -e "OK! \n" # -e 开启转义
    echo `date` 这里使用的是反引号 `, 而不是单引号 ' 这个会显示当前日期


【关系运算符】只支持数字不支持字符串
-eq检测两个数是否相等,相等返回 true。[ $a -eq $b ] 返回 false。

-ne检测两个数是否不相等,不相等返回 true。[ $a -ne $b ] 返回 true。

-gt检测左边的数是否大于右边的,如果是,则返回 true。[ $a -gt $b ] 返回 false。

-lt检测左边的数是否小于右边的,如果是,则返回 true。[ $a -lt $b ] 返回 true。

-ge检测左边的数是否大于等于右边的,如果是,则返回 true。[ $a -ge $b ] 返回 false。

-le检测左边的数是否小于等于右边的,如果是,则返回 true。[ $a -le $b ] 返回 true。

【逻辑运算符】
&&逻辑的AND [[ $a -lt 100 && $b -gt 100 ]] 返回 false
||逻辑的OR [[ $a -lt 100 || $b -gt 100 ]] 返回 true

【字符串运算符】
=检测两个字符串是否相等,相等返回 true。 [ $a = $b ] 返回 false。
!=检测两个字符串是否不相等,不相等返回 true。 [ $a != $b ] 返回 true。
-z检测字符串长度是否为0,为0返回 true。 [ -z $a ] 返回 false。
-n检测字符串长度是否不为 0,不为 0 返回 true。 [ -n "$a" ] 返回 true。
$检测字符串是否不为空,不为空返回 true。 [ $a ] 返回 true。




【if else】
if condition
then
    command1
    command2
    ...
    commandN
else
    command
fi

【for】
for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done

【while】
while condition
do
    command
done


#每个参数代表的意义
$$:shell本身的PID
$!:shell最后运行的后台process的PID
$?:最后运行命令的结束代码返回值(0,表示没有错误,其他都表示有错误)
$*和$@:所有参数列表。如[$*],以"$1 $2 $n"的形式输出所有参数
$#:添加到shell的参数个数
$0:shell本身的文件名
$1-$n:添加到shell的各参数值,$1是第1个参数,$2是第二个

#:井号用于注释,可在脚本中添加注释,提高代码可读性。

!:感叹号用于执行历史命令,例如 !ls 将会执行最近的以 ls 开头的命令。

$:美元符号用于引用变量,例如 $HOME 将会展开为当前用户的家目录。

*:星号表示通配符,用于匹配任意字符,例如 *.txt 将会匹配所有以 .txt 结尾的文件。

?:问号也是一个通配符,用于匹配单个字符,例如 file?.txt 将会匹配 file1.txt、file2.txt 等文件。

[]:方括号也是一种通配符,用于匹配一个字符集中的任意字符,例如 [abc] 将会匹配字符 a、b 或 c。

{}:花括号用于构建命令序列,例如 cp {file1,file2}.txt dir/ 将会拷贝 file1.txt 和 file2.txt 到 dir/ 目录中。

():圆括号用于创建子 shell,例如 (ls; echo "done") 将会在子 shell 中执行 ls 命令,并在完成后输出 done。

|:管道符用于将一个命令的输出传递给另一个命令作为输入,例如 ls | grep "txt" 将会列出当前目录下所有以 .txt 结尾的文件。

> 和 >>:大于号和双大于号用于将命令的输出重定向到一个文件或设备中,例如 ls > files.txt 将会将 ls 命令的输出保存到 files.txt 文件中。>> 与 > 的区别在于,它会将命令的输出追加到文件末尾而不是覆盖文件。

<:小于号用于将文件内容作为命令的输入,例如 sort < input.txt 将会将 input.txt 文件内容作为 sort 命令的输入。

&:和号用于将命令放入后台执行,例如 ./myprogram & 将会在后台执行 myprogram 程序。

;:分号用于将多个命令放在同一行上,例如 command1; command2 将会先执行 command1,再执行 command2。

&& 和 ||:双与号和双或号用于执行条件命令,例如 command1 && command2 将会先执行 command1,只有在 command1 执行成功后才会执行 command2,而 command1 || command2 则相反,只有在 command1 执行失败后才会执行 command2。

$():美元符号加括号用于执行子命令,并将其输出作为变量的值,例如 files=$(ls) 将会将当前目录下的文件列表保存到 files 变量中。

" 和 ':双引号和单引号用于引用字符串,其中双引号会展开变量,而单引号则不会,例如 echo "My home directory is $HOME" 将会输出 My home directory is /home/user,而 echo 'My home directory is $HOME' 则会输出 My home directory is $HOME。

\:反斜杠用于转义字符,例如 \n 表示换行符,\t 表示制表符等。

::冒号用于定义空命令,例如 : 就是一个空命令,它不会做任何事情。