如何熟悉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
如何使用expect自动输入密码?

1 前言 一个问题,一篇文章,一出故事。 笔者最近在一个脚本中使用“adcli passwd-use …

Bash
如何实现SFTP自动上传下载?

1 前言 一个问题,一篇文章,一出故事。 笔者最近需要实现sftp自动上传下载,于是整理此文。 以下 …

Bash
如何实现Base Shell根据关键字获取数组?

1 前言 一个问题,一篇文章,一出故事。 笔者最近写一个Shell发现同一个脚本需要引用两个以上AD …