grep
-E 拓展 == egrep
$ grep -E "[a-z]+" filename
-v 反向匹配
-c 统计匹配行数并非次数
$ echo -e "1 2 3 4\nhello\n5 6"|grep -c "[0-9]" --> 2
l$ echo -e "1 2 3 4\nhello\n5 6"|grep -o "[0-9]" |wc -l 匹配项的个数
-n 显示行号
-b -o
$ echo gun is not linux |grep -b -o "not" 匹配字符的偏移量
-i 忽略大小写
-e 匹配多个样式
-q 静默输出
$ seq 10 | grep 5 -A2 5 6 7
$ seq 10 | grep 5 -B2 3 4 5
$ seq 10 | grep 5 -C2 3 4 5 6 7
递归搜索文件-R -r
$ grep "text" . -R -n
使用0字节为后缀
$ grep "test" file* -lz | xargs -0 rm
cut
提取特定字段或者列
$ cut -d":" -f 2,3 fileanme
按字符截取
$ echo asdfghjkl | cut -c2-5
sed
替换
$ cat 1.sh |sed 's/done/DONE/g' > newfile.txt g表示全局 4g表示从第4处匹配替换
删除空白行
$ sed 's/^$//g' A.txt
$ sed '/^$/d' A.txt
替换文本中3位数字
$ sed 's/\b[0-9]\{3\}\b/666/g' A.txt \b 表示单词边界
&标记已经匹配的
$ echo this id ok | sed 's/\w\+/[&]/g' \w\+ 匹配每一个单词
[this] [id] [ok]
(\1)
$ echo HELLO world | sed 's@\([A-Z]\+\) \([a-z]\+\)@\2 \1@g'
world HELLO
awk
基本结构
awk ' BEGIN{ print "start"} pattern { commands } END{ print "end"}' file
$ awk 'BEGIN{i=0} {i++} END{print i}' A.txt
l$ echo | awk '{var1="v1";var2="v2";var3="v3"; print var1 "-" var2 "-" var3;}'
v1-v2-v3
NR 记录的数量
NF 字段数量
$0 当前行文本内容
$1 第一字段内容
$ echo -e " line1 f2 f3\n line2 f4 f5\n line3 f6 f7"|awk '{print NR,$1,$2,$3}'
打印第2、3字段
$ awk '{print $2,$3}' awk.txt
求和
$ seq 8 | awk 'BEGIN{sum=0;print "Summation"} {print $1 "+";sum+=$1;} END{print "==";print sum;}'
$ seq 5 |awk 'BEGIN{getline;print "head of file:",$0} {print $0}'
head of file: 1
2
3
4
5
匹配
awk 'NR < 5' 行号小于5
awk 'NR==1,NR==4' 行号在1-5之间
awk '!/linux/' 不包含linux的行
指定分隔符
$ awk -F: 'END{print NR}' /etc/passwd
$ awk 'BEGIN{FS=":"} {print NR}' /etc/passwd
打印第n行
$ seq 100 |awk 'NR==4,NR==10'
== $ seq 100|sed -n '4,10p'
合并文件paste
$ paste A.txt B.txt -d':'
-E 拓展 == egrep
$ grep -E "[a-z]+" filename
-v 反向匹配
-c 统计匹配行数并非次数
$ echo -e "1 2 3 4\nhello\n5 6"|grep -c "[0-9]" --> 2
l$ echo -e "1 2 3 4\nhello\n5 6"|grep -o "[0-9]" |wc -l 匹配项的个数
-n 显示行号
-b -o
$ echo gun is not linux |grep -b -o "not" 匹配字符的偏移量
-i 忽略大小写
-e 匹配多个样式
-q 静默输出
$ seq 10 | grep 5 -A2 5 6 7
$ seq 10 | grep 5 -B2 3 4 5
$ seq 10 | grep 5 -C2 3 4 5 6 7
递归搜索文件-R -r
$ grep "text" . -R -n
使用0字节为后缀
$ grep "test" file* -lz | xargs -0 rm
cut
提取特定字段或者列
$ cut -d":" -f 2,3 fileanme
按字符截取
$ echo asdfghjkl | cut -c2-5
sed
替换
$ cat 1.sh |sed 's/done/DONE/g' > newfile.txt g表示全局 4g表示从第4处匹配替换
删除空白行
$ sed 's/^$//g' A.txt
$ sed '/^$/d' A.txt
替换文本中3位数字
$ sed 's/\b[0-9]\{3\}\b/666/g' A.txt \b 表示单词边界
&标记已经匹配的
$ echo this id ok | sed 's/\w\+/[&]/g' \w\+ 匹配每一个单词
[this] [id] [ok]
(\1)
$ echo HELLO world | sed 's@\([A-Z]\+\) \([a-z]\+\)@\2 \1@g'
world HELLO
awk
基本结构
awk ' BEGIN{ print "start"} pattern { commands } END{ print "end"}' file
$ awk 'BEGIN{i=0} {i++} END{print i}' A.txt
l$ echo | awk '{var1="v1";var2="v2";var3="v3"; print var1 "-" var2 "-" var3;}'
v1-v2-v3
NR 记录的数量
NF 字段数量
$0 当前行文本内容
$1 第一字段内容
$ echo -e " line1 f2 f3\n line2 f4 f5\n line3 f6 f7"|awk '{print NR,$1,$2,$3}'
打印第2、3字段
$ awk '{print $2,$3}' awk.txt
求和
$ seq 8 | awk 'BEGIN{sum=0;print "Summation"} {print $1 "+";sum+=$1;} END{print "==";print sum;}'
$ seq 5 |awk 'BEGIN{getline;print "head of file:",$0} {print $0}'
head of file: 1
2
3
4
5
匹配
awk 'NR < 5' 行号小于5
awk 'NR==1,NR==4' 行号在1-5之间
awk '!/linux/' 不包含linux的行
指定分隔符
$ awk -F: 'END{print NR}' /etc/passwd
$ awk 'BEGIN{FS=":"} {print NR}' /etc/passwd
打印第n行
$ seq 100 |awk 'NR==4,NR==10'
== $ seq 100|sed -n '4,10p'
合并文件paste
$ paste A.txt B.txt -d':'