2012-04-02 29 views
56

tôi đang cố gắngLàm thế nào để tôi có thể đọc được từ đầu vào tiêu chuẩn?

grep searchterm myfile.csv | sed 's/replaceme/withthis/g' 

và nhận

unknown option to `s' 

Tôi đang làm gì sai?

Chỉnh sửa:

Theo nhận xét, mã thực sự chính xác. Mã đầy đủ của tôi tương tự như sau:

grep searchterm myfile.csv | sed 's/replaceme/withthis/g' 
# my comment 

Và có vẻ như vì lý do nào đó nhận xét của tôi đã được đưa vào làm sed. Rất lạ.

+0

Bạn có muốn thay thế tập tin của bạn với 'withthis' tại địa điểm của replacename? – Teja

+1

Không, đó không phải là những gì bạn đang cố gắng. Còn cái gì khác mất tích. –

+6

Tôi đoán tốt nhất là trong trường hợp thực sự của bạn, bạn có một '/' trong 'replaceme' hoặc' withthis'. Hãy thử: 's # replaceme # with this # g''. – cababunga

Trả lời

77

sử dụng --expression tùy chọn

grep searchterm myfile.csv | sed --expression='s/replaceme/withthis/g' 
+0

Nhưng bạn không lưu giá trị mới trong tệp phải không? – Teja

+0

+ SOaddict, Đây chỉ là xuất ra stdout, nó không thay đổi myfile.csv. – flickerfly

-8
  1. Mở tập tin sử dụng vi myfile.csv
  2. Nhấn thoát
  3. Loại :%s/replaceme/withthis/
  4. Loại :wq và nhấn Enter

Bây giờ bạn sẽ có mẫu mới trong tệp của mình.

+3

OP muốn biết làm thế nào để làm điều đó với sed, không phải với vim. –

+0

Những gì Noe nói. Ngoài ra, giải pháp vim của bạn là kém hơn so với sed thay thế (s) vì nó không phải là (dễ dàng) kịch bản. – weberc2

+2

Không cần downvote câu trả lời dưới -1, folks. – Titou

9

sử dụng "-e" để xác định sed thể hiện

cat input.txt | sed -e 's/foo/bar/g' 
+0

Tôi đã tự hỏi làm thế nào bằng cách sử dụng "-e" để xác định sed-biểu hiện có thể nhận được sed để đọc từ stdin? Có sed theo mặc định đọc từ stdin? – Tim

+0

có. giống như hầu hết các công cụ un * x, 'sed' đọc từ stdin nếu không có tệp đầu vào nào. –

+0

Cảm ơn. là '-e' cần thiết? Nó hoạt động mà không có '-e'. Tôi tự hỏi mục đích của việc sử dụng '-e' là gì? Cảm ơn. – Tim

3

Để làm sed bắt từ stdin, thay vì từ một tập tin, bạn nên sử dụng -e.

Như thế này:

curl -k -u admin:admin https://$HOSTNAME:9070/api/tm/3.8/status/$HOSTNAME/statistics/traffic_ips/trafc_ip/ | sed -e 's/["{}]//g' |sed -e 's/[]]//g' |sed -e 's/[\[]//g' |awk 'BEGIN{FS=":"} {print $4}' 
Các vấn đề liên quan