如何熟悉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
如何用Tigase监控Elasticsearch集群?

1 前言 一个问题,一篇文章,一出故事。 笔者生产中有一套Elasticsearch集群,笔者为了能 …

Bash
如何用Base Shell获取ES集群状态?

1 前言 一个问题,一篇文章,一出故事。 笔者想要通过Base Shell获取Elasticsear …

Bash
如何熟悉grep命令?

截取括弧“()”中的字符串, echo “This is a test (sample string …