【问题标题】:Print all characters upto a matching pattern from a file从文件中打印所有字符直到匹配模式
【发布时间】:2014-10-16 21:44:07
【问题描述】:

也许是一个愚蠢的问题,但我有一个文本文件需要显示所有内容,直到第一个模式匹配是“/”。 (所有行不包含空格)

Example.txt:

somename/for/example/
something/as/another/example
thisfile/dir/dir/example

首选输出:

somename
something
thisfile

我知道这个 grep 代码会在匹配模式之后显示所有内容:

grep -o '/[^\n]*' '/my/file.txt'

那么有什么方法可以完全相反,也许 rm 匹配模式后的所有内容或反转以显示我的首选输出?

谢谢。

【问题讨论】:

    标签: bash awk sed grep


    【解决方案1】:

    如果您调用像grep 这样的外部命令,您可以使用sed 命令获得相同的结果,即

     echo "something/as/another/example" | sed 's:/.*::'
     something
    

    与其专注于要保留的内容,不如考虑要删除的内容,在这种情况下,第一个 '/' 字符之后的所有内容。这就是sed 命令的作用。

    前导s表示替换,:/.*:是要匹配的模式,/.*表示匹配第一个/' char and all characters after that. The 2nd half of thesedcommand is the replacement. With::`,这意味着什么都不替换。

    sed 的传统习惯用法是使用s/str/rep/,使用/ 字符来分隔搜索与替换,但您可以在初始s(替代)命令之后使用任何您想要的字符。

    一些 sed 需要 / 字符,并需要一个特殊的指示,表明后面的字符是子/替换分隔符。所以如果s:/.*:: 不起作用,那么s\:/.*:: 应该起作用。

    IHTH。

    【讨论】:

    • 哇,我刚刚尝试了您正在寻找的代码,然后我对其进行了 noob 修改(sed 's:/.*::' /my/text.txt)按我的意愿工作,谢谢。
    【解决方案2】:

    你可以使用更简单的reg exp:

    /[^/]*/

    克拉后面的正斜杠是你要匹配的。

    jsFiddle

    【讨论】:

    • 对我来说不太好用,但我牢记这一点以备将来使用。
    【解决方案3】:

    假设文件名为“file.txt”

    cat file.txt | cut -d "/" -f 1
    

    在这里,我们将输入行以“/”作为分隔符(-d“/”)。然后我们选择第一个字段(-f 1)。

    【讨论】:

      【解决方案4】:

      您只需要在否定字符类中包含起始锚点^/

      grep -o '^[^/]*' file
      

      【讨论】:

        猜你喜欢
        • 2016-10-23
        • 2015-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-12
        • 2020-03-02
        • 1970-01-01
        • 2012-05-09
        相关资源
        最近更新 更多