[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 表示制表符等。 ::冒号用于定义空命令,例如 : 就是一个空命令,它不会做任何事情。