sed(查找替换)
-
-n的选项的作用是只显示我们要打印的行,其他内容不显示 sed -n '5'p test.txt 显示第五行的内容 sed -n '1,5'p test.txt 显示1到5行的内容 sed -n '1,$'p test.txt 显示1到尾行的内容 sed -n '/root/'p test.txt 显示包含root的行数 sed -n '/^1/'p test.txt 显示以1开头的行数 sed -n 'in$'p test.txt 显示以in结尾的行数 sed -n '/r..o/'p test.txt sed -n 'oo*'p test.txt -e的作用可以实现多个行为 sed -e '1'p -e '/111/'p -n test.txt 显示第一行并查找包含111的行数 sed '1'd test.txt 删除第一行 sed '1,3'd test.txt 删除1到3行 sed '/oot/'d test.txt 删除含有oot的行数 sed '1,2s/ot/to/g' test.txt s表示替换的动作,把1到2行的ot换成to,g表示全局替换,不加g就只换了本行的第一个。除了用/来分隔也可以用@,#,不对文件生效,只是打印出来而已,最下面有讲怎么生效的 sed 's#ot#to#g' test.txt sed 's/[0-9]//g' test.txt 把所有数字删除 sed 's/[a-zA-Z]//g' test.txt 把所有字母删除 sed -r 's/(rot)(.*)(bash)/\3\2\1/' test.txt -r的选项就是小括号不用加转义符了。1.2.3表示的是前面的三个参数位置变成怎么样,假如我前面的顺讯是a:b:c,然后我选择321的顺序就变成了c:b:a了 sed -r 's/(.*)/123\1' test.txt 在最前面加123,注意\1的作用 sed -r 's/(.*)/\1123' test.txt 在最后面加123,注意\1的作用 sed 's/^.*$/123&/' test.txt 在前面的加123,更上面的结果是一样的,只是写法不同 sed 's/^.*$/&123/' test.txt 在最后面加123 sed -i 's/ot/to/g' test.txt -i的作用就是直接在文件生效
awk
-
-F的作用就是制定以什么为分隔符,例子为以:为分隔符 head -n2 test.txt|awk -F ':' '{print $1}' 前面两行以:为分隔符,打印第一个参数 head -n2 test.txt|awk -F ':' '{print $0}' $0表示整行 awk -F ':' '{print $1"#"$2"#"$3"#"$4}' 指定输出的是以#为分隔符的,就是自定义打印的内容了。 awk '/oo/' test.txt 含有00的行都打印出来 awk -F ':' '$1 ~/oo/' test.txt :为分隔,第一个参数含有00的就打印出来 awk -F ':' '/root/ {print $1,$3} /test/ {print $1,$3}' test.txt 包含root的就打印第一个跟第三个参数,包含test的就打印第一根第三个参数 awk -F ':' '$3=="0"' /etc/passwd awk -F ':' '$3>="500"' /etc/passwd awk -F ':' '$3>=500' /etc/passwd awk -F ':' '$7!="/sbin/nologin"' /etc/passwd awk -F ':' '$3<$4' /etc/passwd awk -F ':' '$3>"5" && $3<"7"' /etc/passwd awk -F ':' '$3>1000 || $7=="/bin/bash"' /etc/passwd head -5 /etc/passwd |awk -F ':' '{OFS="#"} {print $1,$3,$4}‘ awk -F ':' '{OFS="#"} {if ($3>1000) {print $1,$2,$3,$4}}' /etc/passwd head -n3 /etc/passwd | awk -F ':' '{print NF}‘ head -n3 /etc/passwd | awk -F ':' '{print NR}‘ awk 'NR>40' /etc/passwd awk -F ':' 'NR<20 && $1 ~ /roo/' /etc/passwd head -n 3 /etc/passwd |awk -F ':' '$1="root"‘ awk -F ':' '{(tot=tot+$3)}; END {print tot}' /etc/passwd awk -F ':' '{if ($1=="root") {print $0}}' /etc/passwd