sed 使用总结1-基本使用

sed是一个流式的文本编辑器,就是读取一行处理一行。并不像我们常见的编辑器把整个文件都先读入内存中。所以sed很适合处理大数据文件, 每次读取一行,处理一行。处理的结果可以重定向到其他的文件,或者显示在终端中。sed的另外的一个特点就是,非交互式编辑。 只要设置好操作,自动进行。

sed 命令的格式

sed [选项] 命令 文件

sed 的选项

选项 含义
-n 安静模式,只有被处理过行才显示
-e 指令模式,可以有多个,表示多个执行指令
-f 从文件中获得操作的命令
-r 使用扩展的正则表达式
-i 直接写原文的内容,该操作有一定的危险性
--posix 禁用GUN sed 扩展功能
-s 默认sed 会把多个文件当做一个流, GNU sed 可以把他们当做多个文件

sed 常用的指令

指令 含义
a 下一行新增
i 上一行插入字符
d 删除
c 取代 c后可以带字符串
p 打印
s 替换,可以用正则
= 打印行号

这里指令和vi的操作类似
指令格式

i -- innert ; a -- append ; d -- delete , s -- substitution

执行格式

address{
command1
command2
command3
}

命令一行一个,右边的大括号必须单独一行

sed 是的示例

sed '2a 第二行后加上本行内容' file.txt
sed '2i 第二行前加上本行内容' file.txt
sed 's/yes/no/g' file.txt # 全部替换
sed '10,11d' #删除十一十二行
sed -f sed.sh file.txt

多个指令的执行方式

sed 's/a/1/;s/b/2/;s/c/3/' file.txt
sed -e 's/a/1/' -e 's/b/2/' -e 's/c/3/' file.txt
sed '
>s/a/1/
>s/b/2
>s/c/3' file.txt

或者可以使用 -f

对指定的行进行操作

对指定行的操作,可以使用一下几种方式。
1. 指定的行比如 ,2 第二行, $ 最后一行
2. 行的范围 比如 2,5
3. 正则匹配的行 /regexp/
4. 步长,比如 1~2 表示 1,3,5 行; 1~3 表示 1,4,7行
5. n行后的x行, n,+x

替换指令

[address]s/pattern/replacement/flags

# 仅仅替换第二行中的第一个 1
sed '2s/1/x/' test.txt 
# 替换第二行中的全部1
sed '2s/1/x/g' test.txt 
# 替换第二行中的,第2个1
sed '2s/1/x/2' test.txt 
# 如果第二行有1打印改行,并替换第一1位x
sed -n '2s/1/x/p' test.txt
# 写入模式
sed -n '2s/1/x/w' test.txt

# replacement 的特殊字符
# 输出 abc123abc123, & 表示匹配的内容
echo "abcabc" | sed 's/abc/&123/g'

# \n 表示第n个匹配, 输出  abccfg 输出的是两个c
echo "abcfg" | sed 's/\(c\)/\1\1/g'

sed 使用脚本示例

cat > file.txt
this is one line
this is two line
thie is thre line


 cat > sed.sh
/thre/{
s/thre/three/
} 


 cat > sed2.sh
/thre/{
s//three/
} 


sed -f sed.sh file.txt
# sed2.sh //three/ 中 // 如果是空的使用 第一行中的 /thre/


# 给h添加标签
 cat sed.sh
/h[0-9]/{
s//\<&\>/1
s//\<\/&\>/2
}

# 使用:作为/的替换符, 避免 / 转义, 输出 a1xc3
echo 'a1b/2c3' | sed 's:b/2:x:' 

发表评论

邮箱地址不会被公开。