如何使用tr命令替换'--'字符串

3
我有一个输出:
--
out1
--
out2
--
out3

我希望能够获得以下输出:
out1
out2
out3

我想使用:

tr '--' ''

但是它无法识别“--”作为我要替换的第一个字符串。我该怎么解决?
5个回答

8
cat file | sed '/^--/d'

而且在sed中,“d”命令相当不符惯用法。Jerry的grep解决方案对大多数人来说更为熟悉。 - Andy Ross

7
为什么不使用 grep -v "^--$" yourfile.txt 呢?

2

使用awk的另一种方法

awk '!/^--$/' file

或者,awk '$0!="--"' file - ib.

1

tr 最好的用法是删除连字符并留下空行。实现你想要的最好方法是使用 sed,可以参考 Amro 的回答。需要记住的是,tr 处理的是字符列表而不是多字符字符串,因此在参数中放置两个连字符是没有意义的。

$ tr -d "-" < textfile
out1

out2

out3

然而,为了让tr处理连字符和其他字符,您必须使用--终止选项或将连字符放在最后一个字符之后。假设您想要摆脱连字符和字母o:

$ tr -d "-o" < textfile
tr: invalid option -- 'o'
Try ‘tr --help’ for more information.

$ tr -d -- "-o" < textfile
ut1

ut2

ut3

$ tr -d "o-" < textfile
ut1

ut2

ut3

通常情况下,当字符列表存储在变量中时,使用--选项终止符号是一个好主意,这样不良数据就不会不必要地产生错误。对于除了tr之外的命令也是如此。
tr -d -- "$charlist" < "$file"

(1) "将连字符放在第一个字符后面" — 不行,必须把连字符放在字符串参数的最后一个字符后面。 (2) 你展示的例子不会工作 — tr 不接受文件名参数。你必须使用<textfile - G-Man Says 'Reinstate Monica'

-1

你也可以用grep做同样的事情:

cat filename |grep -v "\--"

滥用 cat 命令。 (不,我不是那个给你点踩的人)。 - gniourf_gniourf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接