【问题标题】:Delete last word in each line in bash删除bash中每一行的最后一个单词
【发布时间】:2015-08-22 03:05:58
【问题描述】:

我正在尝试浏览一个文件,并删除每行中的最后一个单词。目前,我正在使用命令

sed 's/^*\n//' old.txt > new.txt

但结果表明 old.txt 与 new.txt 相同。感谢您的帮助,如果我能澄清这个问题,请告诉我。另外,为了定义“单词”,我只使用了空格。

【问题讨论】:

    标签: regex bash sed


    【解决方案1】:

    试试下面的。 \w* 匹配文件中的最后一个单词,$ 将搜索锚定到行尾。

    sed s/'\w*$'// old.txt > new.txt
    

    old.txt 以 new.txt 出现的原因可能是因为您的正则表达式 ^*\n 与 old.txt 中的任何行都不匹配。

    【讨论】:

    • +1,g 是不必要的,因为正则表达式每行只能匹配一次。
    • 已编辑以删除末尾的 g(习惯的力量)。对于那些不知道的人,/g 允许每行有多个匹配项。
    • 感谢您的帮助!这比我想象的要简单。
    • 这只是删除最后一个字符。根据您对单词的定义,您可能想改用\w\+ 或\S\+
    【解决方案2】:

    以下是内联编辑。在运行任何东西之前,请备份您的文件。

    sed -i 's/[[:alnum:]]*$//' /yourfile
    

    如果您使用的是 OS X,您可能需要尝试以下操作

    sed -i '' 's/[[:alnum:]]*$//' /yourfile
    

    如果您对直接写回原始文件不感兴趣,但希望打印输出。

    sed 's/[[:alnum:]]*$//' /yourfile
    

    【讨论】:

      猜你喜欢
      • 2015-03-03
      • 1970-01-01
      • 2017-05-01
      • 2020-09-26
      • 2013-11-25
      • 1970-01-01
      • 1970-01-01
      • 2021-03-18
      • 2012-01-13
      相关资源
      最近更新 更多