如何熟悉Linux Shell sed命令?

Bash

1 前言

一个问题,一篇文章,一出故事。
笔者写Shell经常需要使用sed命令,然而很多用法经常忘记,为了便于自己回忆,于是整理本章节。

2 最佳实践

2.1 删除操作

2.1.1 删除两个行号之间的行

sed -i '5,8d' filename

如果需要使用变量传递,请参考如下范例,

lineStart=5
lineEnd=8
sed -i -e "${lineStart},${lineEnd}d" filename

2.1.2 删除第一行到某行

sed -i '1,8d' filename

如果需要使用变量传递,请参考如下范例,

lineEnd=8
sed -i -e "1,${lineEnd}d" filename

2.1.3 删除某行后面的所有行

sed -i '8,$d' filename

如果需要使用变量传递,请参考如下范例,

lineEnd=8
sed -i -e "1,$d" filename

2.1.4 删除最后一行

sed -i '$d' filename

2.1.5 删除所有空行

sed -i '/^$/d' filename

2.2 替换操作

2.2.1 替换全文的空格

sed 's/ //g'

另外,如下写法也有同样效果,

sed s/[[:space:]]//g

2.2.2 替换行首的空格

sed 's/^[ \t]*//g'

2.2.3 替换行尾的空格

sed 's/[ \t]*$//g'

2.2.4 控制字符转义

echo ' `~!@#$%^&*()_+{}[]|\:;",./?' | sed 's/[[:blank:]]\|[&'"'"'()]/\\&/g'
echo ' `~!@#$%^&*()_+{}[]|\:;",./?' | sed 's/[^[:alnum:]]/\\&/g'

参阅文档
====================
https://quantchem.kuleuven.be/unix_manual/playing/sed/addresses.html
https://www.jianshu.com/p/e4362f863ffc

没有评论

发表回复

Bash
如何快速修改多个nginx配置?

1 前言 一个问题,一篇文章,一出故事。 笔者最近需要快速地修改一堆nginx的配置文件,详细的需求 …

Bash
如何Linux Shell截取日志文件?

1 前言 一个问题,一篇文章,一出故事。 笔者最近使用Linux Shell截取日志文件。 由于有的 …

Bash
如何定期另存日志并删除?

1 前言 一个问题,一篇文章,一出故事。 笔者生产环境有几台WebMail的服务器,定期产生大量的日 …