tr -d从字符串中删除确切的字符串

lee*_*oon 2 unix bash awk sed tr

我试图tr -d从现有的字符串中删除一串字符,而不是删除其他地方的字符.

例如,我想从每个字符串的末尾tr删除.: OKfoo.txt

内容foo.txt:

BROKEN BONES: OK
Kefen Odvora: OK
BOOKS_FOR_MUM: OK
E: OK Amded: OK
Run Code Online (Sandbox Code Playgroud)

这是我运行的命令:

cat foo.txt | tr -d ": OK$"
Run Code Online (Sandbox Code Playgroud)

我希望它输出这个:

BROKEN BONES
Kefen Odvora
BOOKS_FOR_MUM
E: OK Amded
Run Code Online (Sandbox Code Playgroud)

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

BRENBNES
efendvora
BS_FR_MUM
EAmded
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?

Mac OS X Yosemite,bash 3.2.57(1) - 发布

che*_*ner 7

您使用的是错误的工具.你想要的sed不是tr:

cat foo.txt | sed 's/: OK$//'
Run Code Online (Sandbox Code Playgroud)

或者最好

sed 's/: OK$//' foo.txt
Run Code Online (Sandbox Code Playgroud)

当你的输入真的只是一个文件,而不是一个更复杂的命令.


tr -d删除在参数中找到的所有出现的任何字符-d; 它不会将其视为匹配和删除的正则表达式.具体来说,要删除所有出现:,, O,K,并$从每一行.

  • 是的,如果输入是更复杂命令的输出,那么我将其保留为原始问题的占位符。如果输入确实只是一个文件,则`sed's /:OK $ //'foo.txt`就足够了。 (2认同)