Linux sed 命令替换文件字符串

sed(流编辑器,“stream editor”的缩写)。 他与grep,awk 称为Linux 文本处理三剑客。

替换文件字符串

s表示替换所有行,1,2s 代表替换1到2行,1s代表替换第1行
g表示全局,意味着行中的所有匹配项都将被替换
-in-place:直接修改原文件(实际上,在后台创建了一个临时输出文件,然后将原始文件替换为临时文件)

其他sed 用法

下面使用d 命令删除空行或只包含空格的行:

sed '/^\s*$/d' sedtest
sed 's/mark/mk/g; s/li//g' testfile 通过分号连接两个命令
sed '2,5d' testfile 将第2~5行删除
sed '3,$d' testfile 将第3~最后一行删除

Linux 文本处理三剑客之grep

grep(globally search a regular expression and print)

grep -n '2019-10-24 00:01:11' *.log  # 查看某个时间日志, -n:显示行号
grep -i 'rege[a-z]' file # -i:忽略大小写
grep pattern -r dir/ # 递归搜索

Linux 文本处理三剑客之awk

awk 理论上可代替 grep

awk '{print $1,$4}' log.txt # 打印每一行的第1,4列(awk默认以空格划分列, 没有第4列打印空)
awk -F ',' '{print $1, $4}' log.txt # 我们可以用-F标志指定分隔符
awk -F '[ ,]' '{print $1, $4}' log.txt # 同时指定空格和逗号,为分隔符
awk '{printf "%-8s %-10s\n",$1,$4}' log.txt # 格式化打印,1第列的内容占8个字符,第2列内容占10个字符,如果内容比位置长,空一格
awk 'NR>1' log.txt # 过滤第一行
awk 'NR==2 {print $1,$3,NR}' log.txt # 取第2行,并打印1,3列和行号
awk '/ERROR/{print $1,$3}' log.txt # 过滤含有ERROR的行,并打印1,3列

pipe流处理

tail -f x.log | grep pattern

Leave a Reply

Your email address will not be published. Required fields are marked *