文本处理


null

  • 编辑模式

    i 在光标处输入
    大写I 在当前行首输入
    小写o 在光标下方输入
    大写O在光标上方输入
    大写A在当前行尾输入
    小写a在光标出后面输入

  • 命令模式

    两个小gg 光标回到顶部
    大写G 光标回到底部
    :行号 跳转到指定行
    :d行号 删除行
    :y行号 复制行
    :t行号 复制到行
    :m行号 移动到行
    s/查找字符串/替换字符串/g

  • 浏览模式

    按V进入浏览模式
    小键盘移动光标选中
    d剪切 p粘贴
    y复制 p粘贴

文本处理工具

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
wc #统计
sort #排序
uniq #去重

grep # grep [-选项] 关键字 文件

sed # sed 选项 '匹配规则' 文件 匹配规则为两部分 地址命令
sed -n '2,4p' /etc/passwd #输出2-4 行内容
sed -n '2,$p' /etc/passwd #输出2-最后一行内容
sed -n '/nologin/p' /etc/passwd #匹配到所有行
sed -i.bak '/root/a\test' passwd #在root 匹配到行后追加
sed -i.bak '1a\test' passwd #在第一行后追加
sed -i.bak '/root/i\test' passwd #在root匹配到的行前追加
sed -i.bak '/root/c\test' passwd #替代匹配到的行
sed -n 's/root/&test/p' passwd #在匹配到的单词后追加
sed -n 's/root/test&/p' passwd #在匹配到的单词前追加
sed -nE 's/(.*)nologin$/\1test/p' passwd #变量占位


$awk -F':' '{print $1}' passwd #用冒号做分隔符,打印第1列
df| awk '{print $1, $5}' # 默认按照空格分隔
ifconfig | sed -n '2p'|awk '{print $2}' #取IP地址
awk -v FS=':' '{print $1,FS$3}' passwd #定义变量
awk -F: '{printf "%s %d\n", $1,$3}' /etc/passwd #格式化打印
awk -v i=0 'BEGIN{printf "%d\n",++i}'#申明变量计算
awk -v FS=":" '/^root/{printf "%s\n",$1}' /etc/passwd #匹配后再处理
awk -v FS=":" '$3>100 && $3<1000 {printf "%s\n",$1}' /etc/passwd #按照真假匹配处理
awk -v FS=":" 'NR>5 {printf "%s\n",$1}' /etc/passwd #按照行号判断处理
awk -F: 'BEGIN {printf "--------------------------------\n%-20s|%10s|\n-------------------------------\n","usrname","uid"} {printf "%-20s|%10d|\n",$1 ,$3}' /etc/passwd|head -n 10
# BEGIN 模式打印表头
awk 'BEGIN{ for(i=1;i<10;i++){printf "%d",i};{print "\n"}}' #for循环
awk -v i=1 'BEGIN{ for(;i<10;i++){printf "%d ",i};}'

常用字符

. 匹配任意单个字符
[abc] 匹配范围内的字符
[^abc] 不在范围内的字符
[:alnum:] 字母和数字
[:alpha:] 任意大小写字母
[:lower:] 小写字母
[:upper:] 大写字母
[:blank:] 空白字符 空格和制表符
[:space:] 比blank范围广的空白字符 包括空格、制表符、换行符、回车符
[:cntrl:] 不可打印的控制符 退格 删除
[:digit:] 十进制数字
[:punct:] 标点符号