日期:2014-05-16  浏览次数:20641 次

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行的后面