0%

Linux常用命令总结-sed、awk、grep、cut

记性不好,这里总结一些自己常用的命令,会持续更新,以后用到的会再添加上:

  • sed
  • awk
  • grep
  • cut

1.sed

1.1 sed替换

直接替换file.txt文件中指定的内容,g:全局替换

1
sed -i '1,$s/abc/123/g' file.txt

不修改文件中的内容,替换后直接输出到屏幕

1
sed '1,$s/abc/123/g' file.txt

批量替换当前目录下以file开头的文件

1
sed '1,$s/abc/123/g' file*

1.2 sed查看

打印出2-5行,并不改变文件中内容:

1
sed -n '2,5p' file.txt

1.3 sed删除

删除第2行、2-5行、2至最后:

1
2
3
sed '2d' file.txt
sed '2,5d' file.txt
sed '2,$d' file.txt

1.4 sed添加

1
2
3
4
sed '2a add line' file.txt # 在第2行后添加"add line"
sed '2i insert line' file.txt # 在第2行前添加"insert line"
sed '2a add line1 \
add line2' file.txt # 在第二行后添加两行用反斜线

1.5 sed查找

1
2
3
sed -n '/ooo/p' file.txt # 查找含有关键字ooo的行
sed -n '/ooo/d' file.txt # 查找并删除该行
sed -n '/ooo/{s/ooo/kkk/;p;q}' # 查找有ooo的行,替换为kkk,并输出,q:退出

1.5 sed多点编辑

删除第二行,并将ooo替换为kkk。

1
sed -e '2d' -e 's/ooo/kkk/'

2.awk

2.1 awk基本用法

1
2
3
awk '{print $1,$2}' file.txt
awk -F, '{pritn $1,$2}' file.txt # -F,按逗号分割
awk -f try.awk file.txt # -f后加awk脚本
内置变量 描述
$n 当前记录的第n个字段,字段间由FS分隔
$0 完整的输入记录
FS 字段分隔符(默认是任何空格)
IGNORECASE 如果为真,则进行忽略大小写的匹配
NF 一条记录的字段的数目
NR 已经读出的记录数,就是行号,从1开始
OFS 输出字段分隔符,默认值与输入字段分隔符一致。
ORS 输出记录分隔符(默认值是一个换行符)
RS 记录分隔符(默认是一个换行符)

2.2 awk运算符

运算符 描述
=;+=,-=,*=,/=;%=;**=;^= 赋值运算符
||;&& 逻辑或、与
~;!~ 正则表达式匹配与不匹配
<;<=;>;>=;!=;== 关系运算符
1
2
awk '$1==2 {print $1,$3}' log.txt
awk '$1>2 && $2=="aaa" {print $1,$2,$3}' log.txt

2.3 awk正则匹配

1
2
3
4
5
awk '$2 ~ /th/ {print $2,$4}' log.txt
awk '/re/ ' log.txt
awk 'BEGIN{IGNORECASE=1} /this/' log.txt # 忽略大小写
awk '$2 !~ /th/ {print $2,$4}' log.txt
awk '!/th/ {print $2,$4}' log.txt

2.2 awk if条件语句

1
2
3
4
5
6
7
awk 'BEGIN {
a=20;
if (a==10)
print "a = 10";
else
print "a = 20";
}'
1
2
3
4
5
6
awk -F, '{
if($2~/sa59.*/)
print "s1_"$1;
else if($2~/sa60.*/)
print "s2_"$1;
else print "s3_"$1}'

3.grep

1
2
3
4
5
6
7
grep -v "aaa" # -v 反向匹配
# -F Interpret PATTERN as a list of fixed strings, separated by newlines, any of which is to be matched. 将样式视为固定字符串的列表。
# -f后面加文件,文件中每一行为一个pattern
cat test.txt | grep -F -f file.txt

# -i 忽略字符大小写
grep -i "aaa" test

4.cut

1
2
3
4
5
6
cut -b 2 file.txt   # 以字节为单位分隔
cut -c 2- file.txt # 以字符为单位分隔,提取第二到最后一个字符
cut -c 2,4 file.txt # 以字符为单位分隔,提取第2、4个字符
cut -c 2-7 file.txt # 以字符为单位分隔,提取第2至7个字符
cut -d "," -f 2 file.txt #以逗号为分隔符,提取第二个字段
cut -d "," -f 2- file.txt