从粘贴板中的输入字符串中删除换行符的最简单方法

时间:2010-08-14 06:24:26

标签: macos unix shell

希望相当简单,在运行以下命令时解释用例(OS X 10.6):

$ pwd | pbcopy

粘贴板末尾包含换行符。我想摆脱它。

4 个答案:

答案 0 :(得分:83)

pwd | tr -d '\n' | pbcopy

答案 1 :(得分:30)

printf $(pwd) | pbcopy

echo -n $(pwd) | pbcopy

请注意,如果目录名中有空格字符,则应引用这些字符。例如:

echo -n "$(pwd)" | pbcopy

答案 2 :(得分:7)

我写了一个名为noeol的实用程序来解决这个问题。它将stdin管道传输到stdout,但是如果有的话,则会删除尾随的换行符。 E.g。

pwd | noeol | pbcopy

...我将copy别名为noeol | pbcopy

请在此处查看:https://github.com/Sidnicious/noeol

答案 3 :(得分:0)

对我来说,我在tr -d '\n'方法上遇到了问题。在OSX上,我碰巧通过brew install coreutils安装了coreutils软件包。这提供了所有“常规” GNU实用程序,在它们的典型名称前均带有 g 前缀。因此,head将是ghead

使用此方法可以更安全地操作IMO:

pwd | ghead -c -1 | pbcopy

您可以使用od来查看输出情况:

$ pwd | ghead -c -1 | /usr/bin/od -h
0000000      552f    6573    7372    732f    696d    676e    6c6f    6c65
0000020      696c
0000022

vs。

$ pwd | /usr/bin/od -h
0000000      552f    6573    7372    732f    696d    676e    6c6f    6c65
0000020      696c    000a
0000023

区别?

000a是nul和换行符的十六进制代码。 ghead -c -1只是从输出中“剔除”最后一个字符,然后再将其交给| pbcopy

$ man ascii | grep -E '\b00\b|\b0a\b'
     00 nul   01 soh   02 stx   03 etx   04 eot   05 enq   06 ack   07 bel
     08 bs    09 ht    0a nl    0b vt    0c np    0d cr    0e so    0f si