1、sed
sed '1’d test.txt (删除第一行,d删除匹配的行,不会删除原文件,加上-i会删除文件)
sed '1,3’d test.txt (1,3是1到3行)
sed '/oot/‘d test.txt
sed ‘1,10s/ot/to/g’ test.txt |head(s替换关键词,把1-10行的ot替换成to,后面加上head,不然他会输出所有的行)
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/([:]+)?.*)?[:]+)/\3:\2:\1/’ test.txt (调换以冒号分割的首段末段,-r :不用脱义小括号,\3:\2:\1执行替换,中间的(.)就是贪婪匹配,就是最大长度匹配)
sed -r 's/./123:&/’ test.txt (在所有的行前面加上123:)
sed -i ‘s/ot/to/g’ test.txt (-i,就地编辑文件,使文件生效)
sed -n '/root/'Ip test.txt (在p前面加个大写的I,不区分大小写,-n打印匹配的行)
sed -n '5’p test.txt (匹配第五行)
sed -n '1,5’p test.txt (匹配1到5行)
sed -n '1,
′
p
t
e
s
t
.
t
x
t
(
匹
配
所
有
的
行
,
'p test.txt (匹配所有的行,
′ptest.txt(匹配所有的行,代表末尾)
sed -n '/root/'p test.txt (匹配含有root的行)
sed -n '/^1/'p test.txt (匹配1开头的行)
sed -n '/in$/'p test.txt (匹配以in结尾的行,grep匹配不用加//)
sed -n '/r…o/'p test.txt (匹配ro中间有任意两个字符的行)
sed -n '/oo*/'p test.txt
sed -e '1’p -e '/111/'p -n test.txt (-e 在一个表达式里做多个动作)
2、awk
-F 分段符 $后面接数字表示第几段,
head -n2 test.txt|awk -F ‘:’ ‘{print $1}’ (显示两行的第一段,以冒号分割,print$1第一段)
head -n2 test.txt|awk -F ‘:’ ‘{print $0}’ (print $0所有的段)
awk -F ‘:’ ‘{print $1"#"$2"#"$3"#"$4}’ test.txt(输出结果中间用#显示分割,不加的话显示空格分割
awk ‘/oo/’ test.txt (匹配有oo的行)
awk -F ‘:’ ‘$1 ~/oo/’ test.txt(匹配第一段有oo的行,~是包含的意思)
awk -F ‘:’ ‘/root/ {print $1,$3} /test/ {print $1,$3}’ test.txt (多个表达式一起写)
awk -F ‘:’ ‘/root|test/ {print $1,$3}’ test.txt (同上)
awk -F ‘:’ ‘$3==“0”’ /etc/passwd
awk -F ‘:’ ‘$3>=“500”’ /etc/passwd(系统默认按 ASCII码排序,加上双引号,系统认为是字符串)
awk -F ‘:’ ‘$3>=500’ /etc/passwd(针对数字不要加双引号)
awk -F ‘:’ ‘$7!="/sbin/nologin"’ /etc/passwd(第七段不等于/sbin/nologin的)
awk -F ‘:’ ‘$3<$4’ /etc/passwd (第三段小于第四段的)
awk -F ‘:’ '$3>“5” && $3<“7” /etc/passwd (第三段大于5同时小于7的段)
awk -F ‘:’ ‘$3>1000 || $7=="/bin/bash"’ /etc/passwd (第三段大于1000或者第7段等于/bin/bash)
awk -F ‘:’ ‘$3>1000 || $7 ~/bash/’ test.txt ($7 ~ bash,第七段包含bash)
head -5 /etc/passwd |awk -F ‘:’ ‘{OFS="#"} {print $1,$3,$4}’(OFS内置变量,指定分割符)
awk -F ‘:’ ‘{OFS="#"} {if ($3>1000) {print $1,$2,$3,$4}}’ /etc/passwd
awk -F ‘:’ ‘{OFS="#"} $3>1000 {print $1,$2,$3,$4}’ /etc/passwd(同上,相当于来说简单点)
head -n3 /etc/passwd | awk -F ‘:’ ‘{print NF}’ (NF表示段,显示段)
head -n3 /etc/passwd | awk -F ‘:’ ‘{print NR}’ (NR表示行,显示行号)
awk -F ‘:’ ‘{print NF “:”$0}’ test.txt (显示所有行的段数)
awk -F ‘:’ ‘{print NR":"$0}’ test.txt (显示所有行的行号)
awk ‘NR>40’ /etc/passwd (显示41行及后面的行)
awk -F ‘:’ ‘NR<20 && $1 ~ /roo/’ /etc/passwd (&&并且的意思,满足两个条件的)
awk -F ‘:’ ‘NF6 && $1 ~ /root|sync/’ test.txt (有6段并且第一段含有root或者sync)
awk -F ‘:’ ‘{print
N
R
"
:
"
NR":"
NR":"NF}’ test.txt
显示第一行的第一段和第7段第二行的第二段和第七段这样一次类推
head -n 3 /etc/passwd |awk -F ‘:’ ‘$1=“root”’ (一个等于号相当于自定义变量,赋值)
但是赋值之后中间的分隔符没有了,可以使用OFS定义分割符号
awk -F ‘:’ ‘{(tot=tot+$3)}; END {print tot}’ /etc/passwd
求所有行的第三段的和
awk -F ‘:’ '{if ($1"root") {print $0}}’ /etc/passwd
如果第一段等于root,那么该行列出所有的段。
sed、 awk
最新推荐文章于 2024-05-13 15:03:10 发布