0%

Linux 随学随记 (1)

一、vim替换

ctrl+v 进入列模式,向下或向上移动光标,把需要注释的行的开头标记起来,然后按大写的I,再插入注释符,比如#,再按Esc,就会全部注释。或者也可以运行下面这些命令:

1
2
3
4
:s/^/#            #用"#"注释当前行
:2,50s/^/# #在2~50行首添加"#"注释
:.,+3s/^/# #用"#"注释当前行和当前行后面的三行
:%s/^/# #用"#"注释所有行

顺便说一下vim的替换,这个常用,已经牢记,其实和上面用命令注释多行是一样的,只不过是上面注释的命令里的"^"符号代表开始位置而已,在下面这些命令中,"s"代表替换,part1代表查找的内容,part2代表替换的内容,"%"代表所有行,"g"代表替换整行里所有的内容(如果不加"/g"则只替换每行第一个匹配part1的地方)。

p.n.关于g的用法貌似在本系统相反,虽然各处都这么说。。。

1
2
3
4
5
6
7
8
:s/part1/part2              #用part2替换当前行中第1个part1
:s/part1/part2/g #用part2替换当前行中所有的part1
:%s/part1/part2 #用part2替换所有行中每行第1个part1
:%s/part1/part2/g #用part2替换所有行中所有的part1
:2,50s/part1/part2 #用part2替换第2行到第50行中每行第1个part1
:2,50s/part1/part2/g #用part2替换第2行到第50行中所有的part1
:.,+3s/part1/part2 #用part2替换当前行以及当前行后面的三行中每行第1个part1
:.,+3s/part1/part2/g #用part2替换当前行以及当前行后面的三行中所有的part1

BTW:在替换时要注意,某些字符是需要转译的,如空格、括号等。

二、sed添加空行

(一)每行前后添加空行

1
2
3
4
5
6
sed G tmp                          #每行后面添加一行空行
sed '{x;p;x;}' tmp #每行前面添加一行空行
sed 'G;G' tmp #每行后面添加两行空行
sed '{x;p;x;x;p;x;}' tmp #每行前面添加两行空行
sed 'G;G;G' tmp #每行后面添加三行空行
sed '{x;p;x;x;p;x;x;p;x}' tmp #每行前面添加三行空行

依次类推,添加几行空行,就有几个G或者x;p;x

(二)如果行后有空行,则删除,然后每行后面添加空行

sed '/^$/d;G' tmp

(三)在匹配行前后添加空行

1
2
3
4
5
sed '/shui/G' tmp               #如果一行里面有如果一行里面有shui这个单词,那么在他后面会添加一个空行
sed '/shui/{x;p;x;G}' tmp #如果一行里面有shui这个单词,那么在他前后各添加一个空行
sed '/shui/{x;p;x;}' tmp #如果一行里面有shui这个单词,那么在他前面添加一个空行
sed '1{x;p;x;}' tmp #在第一行前面添加空行,想在第几行,命令中的1就改成几
sed '1G' tmp #在第一行后面添加空行,想在第几行,命令中的1就改成几

(四)每几行后面添加一个空行

1
2
3
4
sed 'N;/^$/d;G' tmp                #每两行后面增加一个空行
sed 'N;/^$/d;{x;p;x;}' tmp #每两行前面添加一个空行
sed 'N;N;/^$/d;G' tmp #每三行后面增加一个空行
sed 'N;N;/^$/d;{x;p;x;}' tmp #每三行前面增加一个空行

(五)以x为开头或以x为结尾的行前后添加空行

1
2
3
4
sed '/^xi/G;' tmp             #以xi为开头的行后面添加空行
sed '/^xi/{x;p;x;}' tmp #以xi为结尾的行前面添加空行
sed '/xi$/G;' tmp #以xi为结尾的行后面添加空行
sed '/xi$/{x;p;x;}' tmp #以xi为结尾的行后面添加空行

三、sed删除行首空格

如果确认只是空格:

sed 's/^ *//' infile

如果判断不清行首是空格还是制表符的话, 还可以用这个:

sed 's/^[[:space:]]*//' infile