linux vi 替换
vi/vim 中可以使用 :s 命令来替换字符串。以前只会使用编辑软件进行替换,今天发现该命令有很多种写法(vi 真是强大啊,还有很多需要学习),记录几种在此,方便以后查询。
s是search的意思
:s/well/good/ 替换当前行第一个 well 为 good
:s/well/good/g 替换当前行所有 well 为 good
:%s/the/THE/g
%代表整个文件,会将文件中多有的the改为THE
:5,100 d
删除5至100行
:5 d
删除第5行
:n,$s/well/good/ 替换第 n 行开始到最后一行中每一行的第一个 well 为 good
:n,$s/well/good/g 替换第 n 行开始到最后一行中每一行所有 well 为 good
n 为数字,若 n 为 .,表示从当前行开始到最后一行
:%s/well/good/(等同于 :g/well/s//good/) 替换每一行的第一个 well 为 good
:%s/well/good/g(等同于 :g/well/s//good/g) 替换每一行中所有 well 为 good
:g+//+s/foobar/barfoo/g
:%s/$/'/g 每一行的行尾加单引号
:%s/^/'/g 每一行的行首加单引号
awk 提取第一列
awk -F"," '{print $1}' jisuandaoda_5_xian.txt >jisuandaoda_5.1.txt
awk -F":" 'BEGIN{OFS="+++"}/gdm/{print $1,$2,$3,$4}' /etc/passwd
原始结果
157438 13991351986 2000 2010-10-25 00:17:00 1
157439 15829725655 400 2010-10-25 00:18:40 1
157441 13679223573 300 2010-10-25 00:19:09 1
157442 13519182491 100 2010-10-25 00:19:21 1
awk 'BEGIN{FS="\t"}{OFS=""}{print $2",",$4}' gucheng.txt 输出结果
15191416684,2010-10-25 00:22:51
13519182491,2010-10-25 00:23:02
18792657899,2010-10-25 00:23:21
13468519312,2010-10-25 00:23:22
结论
FS 输入记录分隔符 \t 代表的是mysql的一种字段分隔,字段分隔符(默认是任何空格)。
OFS 输出记录分隔符
dos2unix window文本格式转换
:%s/^\n//g 删除空行
:%s/,/\r/g 逗号换成空行
我要将 50 到 100 行之间的 man 改为 MAN ,并且一个一个挑选是否需要修改,如何下达指令?
:50,100s/man/MAN/gc
s代表swap
一、多行
dd
删除一行
ndd
删除以当前行开始的n行
dw
删除以当前字符开始的一个字符
ndw
删除以当前字符开始的n个字符
d$、D
删除以当前字符开始的一行字符
d)
删除到下一句的开始
d}
删除到下一段的开始
d回车
删除2行
二、复制多行
任务:将第9行至第15行的数据,复制到第16行
方法1:(强烈推荐)
:9,15 copy 16 或 :9,15 co 16
由此可有:
:9,15 move 16 或 :9,15 m 16 将第9行到第15行的文本内容到第16行的后面