2010-06-15 30 views
9

Tôi đã có trạng thái của người giám sát, trông giống như thế này.Chuỗi phân tích cú pháp bằng số bash và trích xuất

frontend       RUNNING pid 16652, uptime 2:11:17 
nginx       RUNNING pid 16651, uptime 2:11:17 
redis       RUNNING pid 16607, uptime 2:11:32 

Tôi cần trích xuất PID của nginx. Tôi đã thực hiện nó thông qua lệnh grep -P, nhưng trên grep máy từ xa được xây dựng mà không cần hỗ trợ biểu thức chính quy perl.

Có vẻ như sed hoặc awk là chính xác những gì tôi cần, nhưng tôi không quen thuộc với họ.

Vui lòng giúp tôi tìm cách thực hiện, cảm ơn trước.

Trả lời

13
sed 's/.*pid \([0-9]*\).*/\1/' 
2
$ cat $your_output | sed -s 's/.*pid \([0-9]\+\),.*/\1/' 
16652 
16651 
16607 
+0

Điều này được biết đến như là một UUOC (Sử dụng vô dụng mèo) – mikerobi

+0

@mikerobi: đó chỉ là một ví dụ về cách đặt đường ống vào lệnh ... anh ấy không nói làm sao anh ta có được kết quả ... nhưng bất cứ điều gì . – Stephen

4

Giải pháp với awk và cắt

[email protected]:~$ cat test 
frontend       RUNNING pid 16652, uptime 2:11:17 
nginx       RUNNING pid 16651, uptime 2:11:17 
redis       RUNNING pid 16607, uptime 2:11:32 
[email protected]:~$ awk '{print $4}' test | cut -d, -f 1 
16652 
16651 
16607 

chỉ nginx:

[email protected]:~$ grep nginx test | awk '{print $4}' | cut -d, -f 1 
16651 
+1

việc dọn dẹp cuối cùng của dấu phẩy có thể được thực hiện với: tr -d ',' – Marcin

+0

Cảm ơn bạn, @Marcin –

+0

không cần sử dụng awk + cut + grep. Chỉ cần awk sẽ làm công việc. 'awk -F ","'/nginx/{print $ 1} 'tệp' – ghostdog74

4

Sử dụng AWK một mình:

awk -F'[ ,]+' '{print $4}' inputfile 
+0

Hoạt động tốt với đường ống: '$ status | grep nginx | ​​awk -F '[,] +' '{print $ 4}' -' – Keith

+2

@Keith: Không cần phải đặt' grep' thành 'awk'. AWK có thể tự làm tất cả: 'status | awk -F '[,] +' '/ nginx/{print $ 4}' ' –

1

giả rằng việc thực hiện grep hỗ trợ các tùy chọn -o, bạn có thể sử dụng hai greps:

output \ 
    | grep -o '^nginx[[:space:]]\+[[:upper:]]\+[[:space:]]\+pid [0-9]\+' \ 
    | grep -o '[0-9]\+$' 
2

Hãy xem pgrep, một biến thể của grep đặc biệt phù hợp cho quá trình grepping tabless.

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