2012-09-05 27 views
9

Tôi có một lệnh như thế này:Làm thế nào để vượt qua đầu ra của grep để sed?

cat error | grep -o [0-9] 

được in chỉ số như 2, 30 và vân vân. Bây giờ tôi muốn vượt qua số này để sed.

Cái gì như:

cat error | grep -o [0-9] | sed -n '$OutPutFromGrep,$OutPutFromGrepp' 

Có thể làm như vậy?

Tôi mới sử dụng shell scripting. Cảm ơn trước

+0

Tại sao không thử nó ra? Lưu ý rằng các biến $ trong dấu nháy đơn không được mở rộng. Nếu bạn muốn điều đó, đặt chúng trong dấu ngoặc kép để thay thế. –

+0

Tôi đã thử lỗi này 'echo cat | grep -o [0-9] | sed -n "$ 1, $ 1" 'dẫn đến lỗi:' sed: -e expression # 1, char 1: unknown command: ', '' – batman

+2

Về 'cat error | grep -o [0-9] ': [Không Grep con mèo] (http://www.terminally-incoherent.com/blog/2006/12/13/dont-grep-the-cat/). – Mehrwolf

Trả lời

4

Nếu mục đích là để in các dòng grep lợi nhuận, tạo ra một kịch bản sed có thể là cách để đi:

grep -E -o '[0-9]+' error | sed 's/$/p/' | sed -f - error 
+1

Cảm ơn. Sao chép lỗi dán, _tripleee_ đã sửa lỗi :-) – Thor

0

Có, bạn có thể chuyển đầu ra từ grep sang sed.

Xin lưu ý rằng để khớp với số nguyên bạn cần sử dụng [0-9] * không chỉ [0-9] sẽ chỉ khớp với một chữ số duy nhất.

Cũng lưu ý bạn nên sử dụng dấu ngoặc kép để có biến được mở rộng (trong đối số sed) và có vẻ như bạn có lỗi đánh máy trong tên biến thứ hai.

Hy vọng điều này sẽ hữu ích.

2

Bạn có thể tìm cho xargs, đặc biệt là -I tùy chọn:

[email protected]:~$ xargs -I FOO echo once FOO, twice FOO 
hi 
once hi, twice hi 
there 
once there, twice there 

dụ của bạn:

[email protected]:~$ cat error 
error in line 123 
error in line 234 
errors in line 345 and 346 
[email protected]:~$ grep -o '[0-9]*' < error | xargs -I OutPutFromGrep echo sed -n 'OutPutFromGrep,OutPutFromGrepp' 
sed -n 123,123p 
sed -n 234,234p 
sed -n 345,345p 
sed -n 346,346p 

Đối với sử dụng thực tế, có thể bạn sẽ muốn vượt qua sed một tập tin đầu vào và xóa echo.

(Fixed UUOC của bạn, bằng cách này.)

+0

+1 Tốt. 'lỗi mèo | grep -o [0-9] + 'Sau này tôi có * dữ liệu *, bây giờ làm thế nào tôi có thể vượt qua nó để' sed'? – batman

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