2013-06-19 30 views
5

Vì vậy, tôi có một tập tin với nội dung:Sử dụng lệnh grep và cut delimiter (trong bash shell scripting UNIX) - và loại "đảo ngược" nó?

puddle2_1557936:/home/rogers.williams/folderz/puddle2 

Tôi muốn sử dụng lệnh grep

grep puddle2_1557936 

hỗn hợp với các lệnh cắt (hoặc một lệnh nếu cần thiết) để hiển thị chỉ là một phần này :

/home/rogers.williams/folderz/puddle2 

cho đến nay, tôi biết rằng nếu làm điều này

grep puddle2_1557936 | cut -d ":" -f1 

sau đó nó sẽ hiển thị

puddle2_1557936 

Vì vậy, là có anyway để loại "nghịch đảo" lệnh delimiter cắt?

LƯU Ý: Giải pháp phải bắt đầu bằng grep puddle2_15579636.

+4

sửa lỗi tối thiểu là sử dụng '-f2' với' cắt'. Btw tại sao nó phải bắt đầu với 'grep puddle2_15579636', sẽ có điều gì xấu xảy ra nếu nó không? – doubleDown

+0

Cảm ơn bạn rất nhiều! Không biết sửa chữa là dễ dàng ... haha. Ngoài ra, nó phải bắt đầu bằng grep puddle2_15579636 vì tôi đang viết kịch bản khá dài, và tại thời điểm đó trong tập lệnh, thông tin duy nhất có sẵn sẽ là! Loại khó giải thích của nó trừ khi bạn thấy toàn bộ dự án! – DeaIss

Trả lời

19

Bạn không cần thay đổi dấu phân tách để hiển thị phần bên phải của chuỗi với cut.

Các -f tắc của lệnh cut là yếu tố n-TH phân cách bằng dấu phân cách của bạn: :, vì vậy bạn có thể chỉ cần gõ:

grep puddle2_1557936 | cut -d ":" -f2 

Một giải pháp (thích ứng với nó một chút) nếu bạn muốn vui vẻ:

Sử dụng :

grep -oP 'puddle2_1557936:\K.*' <<< 'puddle2_1557936:/home/rogers.williams/folderz/puddle2'                   
/home/rogers.williams/folderz/puddle2 

hoặc vẫn với look around

grep -oP '(?<=puddle2_1557936:).*' <<< 'puddle2_1557936:/home/rogers.williams/folderz/puddle2'                  
/home/rogers.williams/folderz/puddle2 

hoặc với :

perl -lne '/puddle2_1557936:(.*)/ and print $1' <<< 'puddle2_1557936:/home/rogers.williams/folderz/puddle2'              
/home/rogers.williams/folderz/puddle2 

hoặc sử dụng (nhờ glenn jackman)

ruby -F: -ane '/puddle2_1557936/ and puts $F[1]' <<< 'puddle2_1557936:/home/rogers.williams/folderz/puddle2' 
/home/rogers.williams/folderz/puddle2 

hoặc với :

awk -F'puddle2_1557936:' '{print $2}' <<< 'puddle2_1557936:/home/rogers.williams/folderz/puddle2' 
/home/rogers.williams/folderz/puddle2 

hoặc với :

python -c 'import sys; print(sys.argv[1].split("puddle2_1557936:")[1])' 'puddle2_1557936:/home/rogers.williams/folderz/puddle2' 
/home/rogers.williams/folderz/puddle2 

hoặc chỉ sử dụng:

IFS=: read _ a <<< "puddle2_1557936:/home/rogers.williams/folderz/puddle2" 
echo "$a" 
/home/rogers.williams/folderz/puddle2 

hoặc sử dụng trong một :

js<<EOF 
var x = 'puddle2_1557936:/home/rogers.williams/folderz/puddle2' 
print(x.substr(x.indexOf(":")+1)) 
EOF 
/home/rogers.williams/folderz/puddle2 

hoặc sử dụng trong một :

php -r 'preg_match("/puddle2_1557936:(.*)/", $argv[1], $m); echo "$m[1]\n";' 'puddle2_1557936:/home/rogers.williams/folderz/puddle2' 
/home/rogers.williams/folderz/puddle2 
+1

'python' và' ruby' ở đâu? +1 –

+0

: p Cảm ơn! Chỉ cần nó cho bash nhưng thông tin thêm không làm tổn thương haha ​​ – DeaIss

+0

Thêm bash one;) –

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