linux's docs

12.3.2: 正则基础-sed高级用法


1. windows文件转换成linux文件

windows下的文件换行符是"\r\n",而linux下文件换行符是"\n"

# 切换方法
# windows文件转换成linux文件
sed "s/\r//g" filename

2. -i-r 某些情况下不能连起来写成-ir

# 有无-r的区别
sed 's/r(oo|aa)t/good/g' test.txt
root:x:0:0:root:/root:/bin/bash
raat:x:0:0:raat:/raat:/bin/bash

sed -r 's/r(oo|aa)t/good/g' test.txt
good:x:0:0:good:/good:/bin/bash
good:x:0:0:good:/good:/bin/bash

# -ir时无效
sed -ir 's/r(oo|aa)t/good/g' test.txt
cat test.txt
root:x:0:0:root:/root:/bin/bash
raat:x:0:0:raat:/raat:/bin/bash

# -i -r分开写的时候生效
sed -i -r 's/r(oo|aa)t/good/g' test.txt
cat test.txt
good:x:0:0:good:/good:/bin/bash
good:x:0:0:good:/good:/bin/bash

3. n和N的高级用法

sed处理文本是以行为单位处理的

# 将搜索出来的5输出来两次
sed '/5/p' test.txt
1
2
3
4
5
5
6

## n可以让sed暂存上一行的信息
# n的含义是next,所以搜索出来5的下一行被打印两次,所以有两个5 6
sed '/5/{n;p}' test.txt
1
2
3
4
5
6
6

## N可以上sed暂存下一行,将两行合并成一条信息来处理
# N将搜索出来的5与下一行6合并在一起,打印出来
sed '/5/{N;p}' test.txt
1
2
3
4
5
6
5
6

Contents