sed 单行脚本快速参考(4)

选择性地显示特定行:

# 显示文件中的前10行(模拟“head”的行为)
sed 10q
# 显示文件中的第一行(模拟“head -1”命令)
sed q
# 显示文件中的最后10行(模拟“tail”)
sed -e :a -e '$q;N;11,$D;ba'

# 显示文件中的最后2行(模拟“tail -2”命令)
sed '$!N;$!D'
# 显示文件中的最后一行(模拟“tail -1”)
sed '$!d'                                                                                    # 方法1
sed -n '$p'                                                                                # 方法2
# 显示文件中的倒数第二行
sed -e '$!{h;d;}' -e x                                                                # 当文件中只有一行时,输入空行
sed -e '1{$q;}' -e '$!{h;d;}' -e x                                              # 当文件中只有一行时,显示该行
sed -e '1{$d;}' -e '$!{h;d;}' -e x                                              # 当文件中只有一行时,不输出
# 只显示匹配正则表达式的行(模拟“grep”)
sed -n '/regexp/p'                                                                    # 方法1
sed '/regexp/!d'                                                                        # 方法2
# 只显示“不”匹配正则表达式的行(模拟“grep -v”)
sed -n '/regexp/!p'                                                                  # 方法1,与前面的命令相对应
sed '/regexp/d'                                                                        # 方法2,类似的语法

# 查找“regexp”并将匹配行的上一行显示出来,但并不显示匹配行
sed -n '/regexp/{g;1!p;};h'
# 查找“regexp”并将匹配行的下一行显示出来,但并不显示匹配行
sed -n '/regexp/{n;p;}'
# 显示包含“regexp”的行及其前后行,并在第一行之前加上“regexp”所
# 在行的行号(类似“grep -A1 -B1”)
sed -n -e '/regexp/{=;x;1!p;g;$!N;p;D;}' -e h
# 显示包含“AAA”、“BBB”或“CCC”的行(任意次序)

sed '/AAA/!d; /BBB/!d; /CCC/!d'                                                # 字串的次序不影响结果
# 显示包含“AAA”、“BBB”和“CCC”的行(固定次序)
sed '/AAA.*BBB.*CCC/!d'
# 显示包含“AAA”“BBB”或“CCC”的行(模拟“egrep”)
sed -e '/AAA/b' -e '/BBB/b' -e '/CCC/b' -e d                            # 多数sed
gsed '/AAA\|BBB\|CCC/!d' # 对GNU sed有效
# 显示包含“AAA”的段落(段落间以空行分隔)
# HHsed v1.5 必须在“x;”后加入“G;”,接下来的3个脚本都是这样
sed -e '/./{H;$!d;}' -e 'x;/AAA/!d;'
# 显示包含“AAA”“BBB”和“CCC”三个字串的段落(任意次序)
sed -e '/./{H;$!d;}' -e 'x;/AAA/!d;/BBB/!d;/CCC/!d'
# 显示包含“AAA”、“BBB”、“CCC”三者中任一字串的段落(任意次序)
sed -e '/./{H;$!d;}' -e 'x;/AAA/b' -e '/BBB/b' -e '/CCC/b' -e d
gsed '/./{H;$!d;};x;/AAA\|BBB\|CCC/b;d'                              # 只对GNU sed有效

# 显示包含65个或以上字符的行
sed -n '/^.\{65\}/p'
# 显示包含65个以下字符的行
sed -n '/^.\{65\}/!p'                                                                  # 方法1,与上面的脚本相对应
sed '/^.\{65\}/d'                                                                        # 方法2,更简便一点的方法
# 显示部分文本——从包含正则表达式的行开始到最后一行结束
sed -n '/regexp/,$p'
# 显示部分文本——指定行号范围(从第8至第12行,含8和12行)

sed -n '8,12p'                                                                        # 方法1
sed '8,12!d'                                                                            # 方法2
# 显示第52行
sed -n '52p'                                                                          # 方法1
sed '52!d'                                                                              # 方法2
sed '52q;d'                                                                            # 方法3, 处理大文件时更有效率
# 从第3行开始,每7行显示一次
gsed -n '3~7p'                                                                      # 只对GNU sed有效
sed -n '3,${p;n;n;n;n;n;n;}'                                                  # 其他sed
# 显示两个正则表达式之间的文本(包含)
sed -n '/Iowa/,/Montana/p'                                                  # 区分大小写方式

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/e334bb037afa6107c36e8e1ca996d2c4.html