web-dev-qa-db-ja.com

bashでパイプされているテキストからキャリッジリターンをトリミングするにはどうすればよいですか?

このコマンドを使用して、最後に入力したコマンドを取得しています。

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

これはbashで非常にうまく機能し、行番号を削除しますが、問題が1つあり(コマンドだけが必要なため、煩わしい)、これをxselクリップボードマネージャーにパイプしています。 :

末尾の改行/キャリッジリターンも取得します...

私はあなたが使用できるいくつかのシェルで知っています:

echo "text \c"

それをbashに組み込む方法はわかりませんが。

その場で入力するのが最も簡単なソリューションの追加ポイント:)

3
cwd

Bash組み込みの!!を使用して履歴の最後のコマンドを取得し、echo -nを使用して、末尾に改行文字を付けずにそのコマンドを出力できます。

echo -n !!

!!引数は実際のコマンド文字列に展開され、-nは出力に改行文字が含まれていないことを確認します。

7
user13742

私があなたの質問を正しく読んでいる場合は、末尾の改行を削除する必要があります。この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'"

1
Tim