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

时间:2018-03-29 19:11:35

标签: bash unix awk sed tr

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

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

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

2 个答案:

答案 0 :(得分:6)

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

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

或者最好

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

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

tr -d删除-d参数中找到的所有字符的所有次出现次数;它不会将其视为匹配和删除的正则表达式。具体而言,您要从每一行中删除所有出现的:OK$

答案 1 :(得分:1)

awk在这里提供帮助。

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