如何熟悉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.1.6 删除包含两个字符串之间的行

sed -i '/start_string/,/end_string/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
如何根据条件输出MySQL表Insert行?

1 前言 一个问题,一篇文章,一出故事。 笔者执行NextCloud的维护任务,需要从数据表中删除用 …

Bash
如何函数代替Base Shell的命令别名?

1 前言 一个问题,一篇文章,一出故事。 之前的章节我们使用命令别名来缩写输入的命令,相见如下, 如 …

Bash
如何监视服务并自动通知?

1 前言 一个问题,一篇文章,一出故事。 最近笔者希望通过脚本实现监视服务并在服务异常是使用两种方式 …