如何从 bash 中通过管道传递的文本中删除回车符?

如何从 bash 中通过管道传递的文本中删除回车符?

我正在使用此命令来获取我最后输入的命令:

history | cut -c 8- | tail -n 2 | head -n 1

它在 bash 中工作得很好,删除了行号,但我有一个问题,(呃,烦恼,因为我只想要命令),我将其通过管道传输到xsel剪贴板管理器:

它还抓取尾随的换行符/回车符......

我知道在某些 shell 中你可以使用:

echo "text \c"

我不确定如何将其纳入bash其中。

对于最容易即时输入的解决方案加分:)

答案1

您可以使用 bash 内置命令获取历史记录中的最后一个命令!!,并用于echo -n打印该命令,末尾不带换行符:

echo -n !!

!!参数将扩展为实际的命令字符串,并-n确保输出不包含换行符。

答案2

如果我正确地阅读了您的问题,您需要删除尾随的换行符。试试这个 perl 位:`perl -ne 'chomp and print'

例子:

[root@talara test]# ls -la
total 20
drwxr-xr-x   3 root root 4096 Jun  7 21:30 .
dr-xr-x---. 28 root root 4096 Jun  8 08:42 ..
-rw-r--r--   1 root root    0 Jun  7 15:10 FILE1
drwxr-xr-x   3 root root 4096 Jun  7 14:49 ham
-rw-r--r--   1 root root   36 Jun  7 21:31 t
-rw-r--r--   1 root root   11 Jun  7 16:21 test

[root@talara test]# ls -la | perl -ne 'chomp and print'
total 20drwxr-xr-x   3 root root 4096 Jun  7 21:30 .dr-xr-x---. 28 root root 4096 Jun  8 08:42 ..-rw-r--r--   1 root root    0 Jun  7 15:10 FILE1drwxr-xr-x   3 root root 4096 Jun  7 14:49 ham-rw-r--r--   1 root root   36 Jun  7 21:31 t-rw-r--r--   1 root root   11 Jun  7 16:21 test

为了方便反复输入,您可以创建一个别名:alias chomp="perl -ne 'chomp and print'"

相关内容