我试图让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
答案 0 :(得分:6)
您使用的是错误的工具。您想要sed
,而不是tr
:
cat foo.txt | sed 's/: OK$//'
或者最好
sed 's/: OK$//' foo.txt
当你的输入真的只是一个文件,而不是一个更复杂的命令。
tr -d
删除在-d
参数中找到的所有字符的所有次出现次数;它不会将其视为匹配和删除的正则表达式。具体而言,您要从每一行中删除所有出现的:
,,
O
,K
和$
。
答案 1 :(得分:1)
awk
在这里提供帮助。
awk '{sub(/: OK$/,"")} 1' Input_file