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

tr -d to remove an exact string of characters from a string

我正在尝试 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)-发布

awk 在这里帮忙。

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

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

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

或最好

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

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


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