【问题标题】:tr -d to remove an exact string of characters from a stringtr -d 从字符串中删除确切的字符串
【发布时间】:2018-09-08 20:21:14
【问题描述】:

我正在尝试让tr -d 从现有字符串中删除一串字符,而不是删除其他任何地方的字符。

例如,我希望trfoo.txt 中每个字符串的末尾删除: OK

foo.txt的内容:

BROKEN BONES: OK
Kefen Odvora: OK
BOOKS_FOR_MUM: OK
E: OK Amded: OK

这是我运行的命令:

cat foo.txt | tr -d ": OK$"

我希望它输出这个:

BROKEN BONES
Kefen Odvora
BOOKS_FOR_MUM
E: OK Amded

但是我得到了这个,我不想要:

BRENBNES
efendvora
BS_FR_MUM
EAmded

我该如何解决这个问题?

Mac OS X Yosemite,bash 3.2.57(1)-release

【问题讨论】:

    标签: bash unix awk sed tr


    【解决方案1】:

    awk 在这里提供帮助。

    awk '{sub(/: OK$/,"")} 1'  Input_file
    

    【讨论】:

      【解决方案2】:

      您使用了错误的工具。你想要sed,而不是tr

      cat foo.txt | sed 's/: OK$//'
      

      或者最好

      sed 's/: OK$//' foo.txt
      

      当您的输入真的只是一个文件,而不是更复杂的命令时。


      tr -d 删除在-d 的参数中发现的所有any 字符;它不会将其视为匹配和删除的正则表达式。具体来说,您将从每一行中删除所有出现的 :OK$

      【讨论】:

      • 恕我直言,先生,无需使用 cat,因为 sed 可以读取 Input_file 本身。
      • 是的,我把它作为原始问题的占位符,以防输入是更复杂命令的输出。如果输入真的只是一个文件,sed 's/: OK$//' foo.txt 就足够了。
      • 效果很好,谢谢!是的,我只会将它与纯文本文件一起使用。现在,如果我将它与一个复杂的命令一起使用,那么我需要使用什么?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-19
      • 2019-09-08
      • 2013-04-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多