使用正则表达式和 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 行?的主要内容,如果未能解决你的问题,请参考以下文章