使用正则表达式和 sed 时跳过前 n 行?

Posted

技术标签:

【中文标题】使用正则表达式和 sed 时跳过前 n 行?【英文标题】:Skipping the first n lines when using regex with sed? 【发布时间】:2011-10-15 17:09:58 【问题描述】:

sed 中,是否可以在应用正则表达式时跳过前 n 行?我目前正在使用以下内容:

cat test | sed '/^Name/d;/^----------/1;/^(/d;/^$/d'

在以下文件中:

Name
John
Albert
Mora
Name
Tommy
Tammy

在一次通过中,我想使用一些正则表达式(其中一个是删除包含Name 的行,但在这种情况下我想跳过第一行)以获得以下内容:

Name
John
Albert
Mora
Tommy
Tammy

因为文件很大,我不想多次通过,所以任何一次通过的方法都会很棒。

【问题讨论】:

【参考方案1】:

是的,您可以将 sed 命令应用于具有 N,M 语法的行范围。在这种情况下,你想要这样的东西:

sed -e '2,$s/foo/bar/'

删除示例:

sed -e '2,$ /^Name/d '

【讨论】:

你能告诉我如何使用删除而不是替换的语法吗?基本上,当我做这样的事情时:sed '2,$/^Name/d' 命令失败并出现错误:sed: -e expression #1, char 4: unknown command: /'` +1 刚刚想通了 :) 感谢您为我指出正确的方向。 '2,$' 表示从第 2 行到文件末尾。 $ 之后的项目是一个操作。对于这些示例,s/search/replace /^string-to-delete/d 嗯。我在 Mac OS 中尝试了 sed -e '2,$ /^Name/d ',它被 sed: 1: "2,$ /^Name/d ": extra characters at the end of d command 炸毁了

以上是关于使用正则表达式和 sed 时跳过前 n 行?的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式:sed

Linux运维正则表达式之sed

正则表达式(sedawk)

linux正则

sed命令和正则表达式

三个支持正则表达式的行处理的工具: grep/sed/awk