Sao chép một văn bản một dòng dài từ một thiết bị đầu cuối với dòng thay đổi không mong muốn


14

locate ... | less xuất ra một đường dẫn dài, được hiển thị dưới dạng một số dòng trong thiết bị đầu cuối, mặc dù nó thực sự là một dòng duy nhất.

Tôi sao chép đường dẫn từ thiết bị đầu cuối bằng cách chọn văn bản bằng chuột và nhấn Ctrl+ Shift+ C. Khi tôi dán nó vào một tệp văn bản, tôi nhận được dòng thay đổi không mong muốn trong văn bản, chính xác giống như cách nó được hiển thị trong thiết bị đầu cuối.

Nhưng tôi nhớ đôi khi tôi có thể sao chép một đầu ra đường dài bằng cách locate ... | less, mà không đưa ra thay đổi dòng không mong muốn, và đôi khi tôi không thể. Tôi không nhận ra nếu tôi làm điều gì đó khác đi.

Vì vậy, tôi tự hỏi làm thế nào để đảm bảo vấn đề sẽ không xảy ra? Cảm ơn!

Hệ điều hành của tôi: Ubuntu 12.04.

Thiết bị đầu cuối của tôi: Thiết bị đầu cuối Gnome 3.4.1.1



Nhưng Ctrl + Shift + C đôi khi có thể sao chép một dòng dài mà không sao chép dòng thay đổi. Vẫn còn những vấn đề khác nhau, tôi nghĩ.
Tim

Vì vậy, Q của bạn là nhiều hơn về lý do tại sao hoặc làm thế nào để kiểm soát hành vi này?
slm

Đúng. Tôi sao chép văn bản ra khỏi thiết bị đầu cuối bằng phím tắt (mà tôi đoán là cách nhanh nhất), không phải bằng cách hướng đầu ra vào một tệp
Tim

Có bất cứ điều gì thêm về khi hành vi là một cách so với cách khác?
slm

Câu trả lời:


3

Thay vì sao chép những gì được hiển thị trên thiết bị đầu cuối (chỉ những gì phù hợp trên màn hình, với), hãy sao chép văn bản thực tế. Sử dụng một trong các tiện ích bên ngoài xsel hoặc xclip (chúng có hầu hết các tính năng giống nhau, tôi sẽ sử dụng xsel trong câu trả lời này) để sao chép dữ liệu từ hoặc vào bảng tạm X. Để sao chép vào bảng tạm, chuyển nội dung mong muốn vào đầu vào tiêu chuẩn. Khi dán từ bảng ghi tạm, nội dung được ghi vào đầu ra tiêu chuẩn.

Ít hơn, sử dụng |lệnh để dẫn một loạt các dòng thông qua một lệnh. Cuộn đến dòng đầu tiên bạn muốn hành động, nhập mmđể đặt dấu, cuộn đến dòng cuối cùng và nhập |mxsel -bvà nhấn Enter. Hai dấu được xác định trước: ^cho phần đầu của tệp, $cho phần cuối của tệp. Vì vậy, để sao chép toàn bộ tập tin, sử dụng <|$xsel -b. Để sao chép một dòng duy nhất, sử dụng mm|mxsel -bEnter.

Xóa -btùy chọn để sao chép vào lựa chọn chính thay vì bảng tạm.


3

Hành vi thực sự của việc này là như sau:

nếu bạn đang ở trong lessvà bạn có một tệp có một dòng rất dài, thì nếu bạn cuộn qua dòng dài xuống và cuộn ngược lên, bạn có nhiều dòng, khi sao chép toàn bộ văn bản. Sau đó, khi bạn cuộn các dòng bị tách xuống phía dưới cùng của thiết bị đầu cuối và cuộn các dòng lên một lần nữa, các ngắt dòng sẽ lại bị xóa.

Để hình dung:

nhập mô tả hình ảnh ở đây


2

Bạn có thể sao chép các dòng đầu ra mà không cần thêm dòng mới (ngắt dòng) nếu văn bản được xuất trực tiếp đến thiết bị đầu cuối.
Thiết bị đầu cuối có thể theo dõi nơi kết thúc của dòng thực sự.

Nhưng nếu các dòng được xuất ra bởi lesshoặc một pagerchương trình tương tự , thì thiết bị đầu cuối không biết dòng mới ở đâu. Máy nhắn tin sử dụng thiết bị đầu cuối như một màn hình đầy đủ các ký tự và nói với thiết bị đầu cuối "đặt các ký tự này ở đó" và các thao tác như cuộn. Nhưng, đối với thiết bị đầu cuối, không có cách nào để xem nơi mới có ý định.


2
Tôi thấy rằng đôi khi tôi sao chép các ngắt dòng và đôi khi tôi không. Nó không nhất quán theo thời gian. Hôm nay cả hai đã xảy ra khi tôi Ctrl-shift-c từ locate <something> | lesshai trường hợp khác nhau.
Tim

Ít hơn, nó tự vẽ màn hình của nó, thông thường, để thiết bị đầu cuối không nhìn thấy nơi các dòng kết thúc. Nhưng ít có thể được cấu hình thực sự không làm gì cho các tập tin ngắn phù hợp với màn hình. Vì vậy, có thể sự khác biệt giữa các trường hợp là ít hơn ở một chế độ khác. (hãy xem echo $LESS, có thể có những lựa chọn thú vị với ít hơn.)
Volker Siegel

@Tim điều này đã làm phiền tôi trong nhiều năm qua. Có lẽ câu trả lời của @ niknah gợi ý nguyên nhân? Tôi thường chuyển đổi giữa các -Schế độ vì vậy có lẽ điều đó cũng làm cho nó tồi tệ hơn.
Dan Gravell

1
@Tim: Tôi đã phát hiện ra điều gì đó có thể đúng hoặc không đúng trên hệ điều hành & phiên bản ít hơn của bạn: hành vi sao chép thay đổi tùy thuộc vào cách tôi đến dòng đích ít hơn. Nếu tôi đang tìm kiếm về phía trước thì bản sao không bao gồm các dòng mới (nghĩa là nó sao chép nội dung dòng dài ban đầu). Tuy nhiên, nếu tôi đã tìm kiếm ngược qua tệp để đến dòng đích, thì bản sao bao gồm các dòng mới và chia dòng dài thành nhiều dòng riêng biệt. Có vẻ phù hợp trên Mac và Linux đối với tôi.
erik.weathers

2

Trong less, nếu bạn chọn bọc nhiều dòng văn bản và sau đó sao chép nó, nó sẽ đi xuống dưới dạng một dòng.

Nếu bạn nhấn PgUprồi sao chép cùng một văn bản, nó sẽ xuất hiện dưới dạng nhiều dòng.

PgDnlà tốt, mũi tên là tốt. Nhưng PgUplàm cho văn bản được chia ra.


Đó không chính xác là nguyên nhân thực sự của hành vi. Xem câu trả lời của tôi: unix.stackexchange.com/a/445590/105308
bobbel

0

Nếu mục tiêu là sao chép và dán, tôi sử dụng catthay vì lesshoặc moresau đó thiết bị đầu cuối nắm bắt nó như thực tế chứ không phải là nó đang được hiển thị.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.