【问题标题】:Skipping the first n lines when using regex with sed?使用正则表达式和 sed 时跳过前 n 行?
【发布时间】: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

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

【问题讨论】:

    标签: unix text command-line sed


    【解决方案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 炸毁了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多