一、tr(替换命令)
二、grep(文本匹配)
三、sed(文本替换)
四、awk(强大的文本分析工具)
1、基本用法
2、条件表达式 过滤
3、内建变量
4、脚本
5、正则匹配
一、tr(替换命令)
1 echo 12345 | tr '0-9' '9876543210' //加解密转换,替换对应字符
2 cat file | tr -d '0-9' // 删除所有数字
3 cat file | tr -d -c '0-9' //删除非数字数据
4 cat file | tr -s ' ' // 压缩多余的空格
二、grep(文本匹配)
-v :返回不匹配的
-e:后跟匹配模式,可以跟多个-e参数,来进行多个模式的匹配
三、sed(文本替换)
-e:后面跟处理命令,有时候也可不写-e,没有-e时后面需要单引号包裹
sed默认输出替换后的内容 -i 参数直接替换源文件
a :新增:
d :删除
c :取代
s :取代
i :插入
p:打印
sed 's/text/replace_text/' file #替换每一行的第一处匹配的text
sed 's/text/replace_text/g' file #替换全部
nl filename | sed '2,5d' # 删除2——5行
sed -e 4a\newLine testfile # 在第4行后面加新行“newLine”
nl filename | sed '2a drink tea' # 第2行后加新行“drink tea”
sed -e '4 a newline\nnewline2' testfile # 加两行
nl filename | sed -n '/text/p' #匹配text,“-n” 参数可以使得只输出匹配到的行
nl filename | sed '/text/d' # 匹配并删除
# 匹配字符串“root” 并在匹配的行中将text替换为replace、打印、退出
# 匹配之后执行的命令放到**大括号**里,命令之间**分号分割**
nl filename | sed -n '/root/{s/text/replace/;p;q}'
nl filename | sed 's/^.*begin//g' # 关键是正则部分,将begin前的删除
sed 's/^.\{3\}/&\//g' file # 字符串插入字符:将文本中每行内容(ABCDEF) 转换为 ABC/DEF:
nl filename | sed -e '3,$d' -e 's/bash/blueshell/' # 多点编辑
四、awk(强大的文本分析工具)
命令格式
1 awk -F -va=1 -vb=s '分隔符' 'script' filename
2 awk -f scriptfile fileneame
3 awk BEGIN{ } { } END{ }
-v:后面跟定义的变量如上面定义了 a =1 ,b=s
$awk -va=1 '{print $1,$1+a}' log.txt
2 3
3 4
$awk -va=1 -vb=s '{print $1,$1+a,$1b}' log.txt
2 3 2s
3 4 3s
-F:分割符,可以跟多个如 -F '[.,]’ 点和逗号为分隔符,默认空格和tab
awk -F '[ ,]' '{print $1,$2,$5}' log.txt
-f 后面跟脚本文件脚本文件格式如下
#!/bin/awk -f
BEGIN{} # 运行前
{} # 以每一行为单位执行这里面的脚本
END{} # 运行后
1、基本用法
awk '{print $1,$4}' log.txt #
awk '{printf "%-8s %-10s\n",$1,$4}' log.txt # 格式化输出
2、条件表达式 过滤
几乎支持所有的 c 比较符,可以使用 &&、|| 连接
awk '$1>2 && $2=="Are" {print $1,$2,$3}' log.txt
3 Are you ok
3、内建变量
$n:表示第列, $0:表示所有列
FS:域分隔符, 默认为空白字符
RS:记录分割符,默认为换行
NR:已经读出的记录数,从1开始
4、脚本
脚本中支持判断(if-else if - else),循环(while,for等)与C类似
例子:脚本为cal.awk,原始文件为score.txt
$cat score.txt
Marry 2143 78 84 77
Jack 2321 66 78 45
Tom 2122 48 77 71
Mike 2537 87 97 95
Bob 2415 40 57 62
$ cat cal.awk
#!/bin/awk -f
#运行前
BEGIN {
math = 0
english = 0
computer = 0
printf "NAME NO. MATH ENGLISH COMPUTER TOTAL\n"
printf "---------------------------------------------\n"
}
#运行中
{
math+=$3
english+=$4
computer+=$5
printf "%-6s %-6s %4d %8d %8d %8d\n", $1, $2, $3,$4,$5, $3+$4+$5
}
#运行后
END {
printf "---------------------------------------------\n"
printf " TOTAL:%10d %8d %8d \n", math, english, computer
printf "AVERAGE:%10.2f %8.2f %8.2f\n", math/NR, english/NR, computer/NR
}
# 执行结果
$ awk -f cal.awk score.txt
NAME NO. MATH ENGLISH COMPUTER TOTAL
---------------------------------------------
Marry 2143 78 84 77 239
Jack 2321 66 78 45 189
Tom 2122 48 77 71 196
Mike 2537 87 97 95 279
Bob 2415 40 57 62 159
---------------------------------------------
TOTAL: 319 393 350
AVERAGE: 63.80 78.60 70.00
~ 表示模式开始,当整行匹配是不需要 ~
// 中是模式
# 输出第二列包含 "th",并打印第二列与第四列
awk '$2 ~ /th/ {print $2,$4}' log.txt
awk '$2 !~ /th/ {print $2,$4}' log.txt # 取反
# 整行匹配的时候可以这样写 去掉 “ ~ ”
awk '/re/' log.txt
awk '!/th/ {print $2,$4}' log.txt
# 匹配 re 或 th
awk '/re|th/' log.txt
————————————————
版权声明:本文为CSDN博主「FSky-晓」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43659784/article/details/115774004
————————————————
版权声明:本文为CSDN博主「FSky-晓」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43659784/article/details/115774004
————————————————
版权声明:本文为CSDN博主「FSky-晓」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43659784/article/details/115774004
联系客服