sed常用命令举例

来源:互联网 发布:连接阿里云服务器 编辑:程序博客网 时间:2024/06/06 18:44

1、以 p 操作说明地址的使用方法
# 显示 myfile 文件的全部内容
$ sed -n p myfile
# 显示 myfile 文件中第 5 行的内容
$ sed -n 5p myfile
# 显示 myfile 文件中最后一行的内容
$ sed -n '$p' myfile
# 显示 myfile 文件从第 3 行开始步长为5的行的内容
$ sed -n 3~5p myfile
$ sed -n 3~5= myfile
# 显示 myfile 文件从第 3 行开始到第 10 行的内容
$ sed -n 3,10p myfile
# 显示 myfile 文件第 10 行及其后的 10 行内容
$ sed -n 3,+10p myfile
# 显示 myfile 文件从第 3 行开始到最后一行的内容
$ sed -n '3,$p' myfile
# 显示 myfile 文件中所有包含 LANG 的行
$ sed -n /LANG/p myfile
# 显示 myfile 文件中所有不包含 LANG 的行
$ sed -n '/LANG/!p' myfile
# 显示 myfile 文件从第 3 行开始到其后第一次出现 LANG 的行
$ sed -n 3,/LANG/p myfile
# 显示 myfile 文件从第一次出现 LANG 的行开始到最后一行的内容
$ sed -n '/LANG/,$p' myfile
# 显示 myfile 文件从第一次出现以 case 开始的行到第一次出现以 esac 开始的行
$ sed -n /^case/,/^esac/p myfile
以上 se d 命令中p 操作的地址使用也适用于其他操作。

2、替换命令使用举例
# 在每个输入行中, 将第一个出现的 Windows 替换为 Linux
$ sed 's/Windows/Linux/' myfile
# 在每个输入行中, 将第一个出现的 Windows 替换为 Linux ,打印替换结果的行
$ sed -n 's/Windows/Linux/p' myfile
# 在每个输入行中, 将出现的每个 Windows 替换为 Linux
$ sed 's/Windows/Linux/g' myfile
# 在每个输入行中, 将出现的每个 Windows 替换为 Linux ,打印替换结果的行
$ sed -n 's/Windows/Linux/g' myfile
# 在每个输入行中, 将出现的每个 Unix 替换为 Unix/Linux(&表示匹配到的字符串)
$ sed -e 's/Unix/&\/Linux/g' myfile
# 将所有连续出现的c都压缩成单个的c
$ sed 's/cc*/c/g' myfile
# 删除行首的一个空格
$ sed 's/ //' myfile
# 删除每一行前导的连续“空白字符”(空格,制表符)
$ sed 's/^[ \t]*//' myfile
# 删除以句点结尾的行中末尾的句点
$ sed 's/\.$//g' myfile
# 删除每行的第一个字符
$ sed 's/.//' myfile
# 删除每行结尾的所有空格
$ sed 's/ *$//' myfile
# 在文件的每一行开始处插入两个空格
$ sed 's/^/ /' myfile
# 在每一行开头加上一个尖括号和空格(引用信息)
$ sed 's/^/> /' myfile
# 将每一行开头处的尖括号和空格删除(解除引用)
$ sed 's/^> //' myfile
# 删除路径前缀
$ sed 's/.*\///' myfile
$ ls -d /usr/share/man/man1 |sed 's/.*\///'
# 过滤掉所有标点符号(.、,、?、!)
$ sed 's/\.//g' -e 's/\,//g' -e 's/\?//g' -e 's/\!//g' myfile
# 对于 GNU sed 可以使用如下的等效形式
$ sed 's/\.//g ; s/\,//g ; s/\?//g ; s/\!//g' myfile
# 不论什么字符,紧跟着s命令的都被认为是分隔符,
# 所以,“#”在这里是分隔符,代替了默认的“/”分隔符。
# 尤其适用于替换文件路径
$ sed 's#/some/path/old#/some/path/new#g' myfile

3、其他命令使用举例
# 删除所有空白行
$ sed '/^$/d' myfile
$ sed '/./!d' myfile
# 删除文件顶部的所有空行
$ sed '/./,$!d' myfile
# 从输入的开头一直删除到第1个空行(第一个空行也删除掉)
$ sed '1,/^$/d' myfile
# 删除所有偶数行,与 sed -n '1~2p' myfile 等效
$ sed 'n;d' myfile
# 删除掉所有包含"GUI"的行
$ sed '/GUI/d' myfile
# 将所有"GUI"都删除掉, 并保持剩余部分的完整性
$ sed 's/GUI//g' myfile
# 在每一行后面增加一空行
$ sed G myfile
# 在匹配“regex”的行之后插入一空行
$ sed '/regex/G' myfile
# 将 myfile 中从case开始的行到esac结束的行写到文件 case-block
$ sed '/^case/,/^esac/w case-block' myfile
# 在 myfile 末尾($)追加新行
# 反斜线 \ 是必需的,它表示将插入一个回车符。在任何要输入回车的地方您必须使用反斜线。
$ sed '$a\
> newline1\
> newline2\
> newline3' myfile
# 在匹配“regex”的行之后追加新行
$ sed '/regex/a\
> newline1\
> newline2\
> newline3' myfile
# i\ 和 c\ 操作的格式与 上面的 a\ 操作的格式相同

$sed -e '1s/^.*$/aa/' -e '2s/^.*$/bb/' myfile

# -e选项可以使一个shell语句中同时包含多个sed命令

$sed -i -e '1s/.*/aa/' -e '2s/.*/bb' myfile

# -i 选项使sed命令直接修改myfile,而不是以数据流形式输出到标准输出

#sed -n 'l' myfile

# 'l' 命令显示myfile全文中的非打印字符

# -n选项是为了避免重复输出同一行数据(其中一行不显示而另一行显示非打印字符)

 

http://blog.163.com/p_wenhui/blog/static/1640633142011425113727843/