2009-05-13 29 views
11

Nếu tôi muốn cắt một danh sách các văn bản bằng cách sử dụng một chuỗi như một dấu phân cách, là có thể? Ví dụ tôi có một thư mục nơi một danh sách các kịch bản shell gọi cùng một kịch bản perl nóiCó thể sử dụng một chuỗi như một dấu phân tách trong lệnh unix cut không?

abc.pl 

Vì vậy, khi tôi làm

$grep abc.pl * 

trong thư mục đó, nó mang lại cho tôi kết quả như sau

xyz.sh: abc.pl 1 2 
xyz2.sh: abc.pl 2 
mno.sh: abc.pl 3 
pqr.sh: abc.pl 4 5 

Tôi về cơ bản muốn tất cả đầu ra sau "abc.pl" (để kiểm tra các đối số phạm vi nào đang được chuyển đến perl ngay bây giờ)

Khi tôi cố gắng

$grep abc.pl * | cut -d'abc.pl' -f2 

HOẶC

$grep abc.pl * | cut -d'abc\.pl' -f2 

của nó đem lại cho tôi

cut: invalid delimiter 

Khi tôi đọc người đàn ông cho cắt nó khẳng định

dấu phân cách có thể là một đa ký tự byte.

Tôi đang làm gì/giải thích sai ở đây?

+0

xin lỗi vì sự định dạng lemme vài dòng đúng ở trên để họ có ý nghĩa ... nó mang lại cho tôi kết quả như sau xyz.sh: abc.pl 1 2 xyz2.sh: abc.pl 2 mno.sh: abc.pl 3 pqr.sh: abc.pl 4 5 ... Khi tôi cố gắng $ grep abc.pl * | cut -d'abc.pl '-f2 HOẶC $ grep abc.pl * | cắt -d'abc.pl' -f2 đưa nó cho tôi cắt: không hợp lệ delimiter ... Hy vọng các dòng mới làm việc lần này :) –

+0

nope :(không chắc chắn lý do tại sao dòng mới không hiển thị của nó như đã nhập :( –

+0

Bạn có nghĩa là các trang người đàn ông với các ví dụ sử dụng ZERO không làm cho nó rõ ràng? – Chance

Trả lời

6

Khi tôi đọc người đàn ông để cắt trạng thái ... delim có thể là ký tự nhiều byte.

Nhiều byte, nhưng chỉ một ký tự chứ không phải một chuỗi.

canti:~$ ll | cut --delimiter="delim" -f 1,2 
cut: the delimiter must be a single character 
Try `cut --help' for more information. 

canti:~$ cut --version 
cut (GNU coreutils) 5.97 

Bạn có thể chỉ định chỉ delimiter đầu ra như là một chuỗi (vô dụng trong trường hợp này):

--output-delimiter=STRING               
     use STRING as the output delimiter the default is to use the input delimiter 
+0

Cảm ơn Alex .... –

5

tại sao không sử dụng grep abc.pl | awk '{print $3, $4}'?

+0

không thực sự làm việc theo cách tôi mong đợi nó để hiển thị kết quả Hiển thị danh sách một phần của nó ... cũng tò mò whats sai với cách tôi đang sử dụng –

+0

Tôi đã không bao giờ thực sự được sử dụng cắt. Nhiệm vụ của bạn hét lên cho awk hoặc perl – alamar

+0

Cool ... Cảm ơn alamar ... tuy nhiên tôi sẽ đưa ra câu trả lời đúng cho phản ứng của Alex, như ông thực sự trả lời những gì tôi đang tìm kiếm Tôi ước có một cách để chọn hai câu trả lời ... nhưng sau đó nó sẽ gây ra nhiều probs khác. Vì vậy, cảm ơn sự giúp đỡ của bạn. Thực sự đánh giá cao nó :) –

0

$ grep abc.pl * | cut -d '' -f3-999

Trong trường hợp đó, chỉ cần sử dụng ký tự khoảng trắng làm dấu phân cách.

+1

Không cần phải bao gồm '999' - chỉ cần làm 'cut -d' '- f3-'. – jnylen

0

Hoặc bạn có thể thử ví dụ như Ruby:

grep abc.pl * | ruby -ne 'p $_.chomp.split("abc.pl").last' 
3

Hãy thử sử dụng này.

$grep abc.pl * | awk -F 'abc.pl' '{print $2}' 

-F fs --field-tách fs fs Sử dụng cho tách lĩnh vực đầu vào (giá trị của biến được xác định trước FS).

Các vấn đề liên quan