2011-02-10 27 views
27

Tôi muốn thay thế chuỗi foo trên toàn cầu bằng thanh chuỗi, sử dụng sed. Điều này chỉ nên được thực hiện cho các dòng KHÔNG bắt đầu bằng chuỗi ## Input.Làm thế nào để thay thế toàn bộ chuỗi trong dòng KHÔNG bắt đầu bằng một mẫu nhất định

Tôi không thể làm cho nó hoạt động. Tôi đã thử những thứ như thế này nhưng đã đạt đến một điểm mà tôi không chắc liệu tôi có biết mình đang làm gì không:

sed -i '/^##Input/ s/foo/bar/g' myfile 

Xin vui lòng trợ giúp!

Trả lời

46

Bạn chỉ cần phủ nhận trận đấu sử dụng !:

sed -i '/^##Input/! s/foo/bar/g' myfile 
-4

Bạn phải thoát số # như trong \#.

+4

Không cần để thoát khỏi '#'. Nó không có ý nghĩa đặc biệt đối với 'sed'. –

-4

Một câu trả lời xấu xí cho một yêu cầu xấu xí (tức là họ có được những gì họ yêu cầu):

echo \{ 
for file in *.json; do 
    sed -n '/^[\{\}]/! s/\([^\,]\)$/\1,/; /^[\{\}]/!p' $file 
done 
echo \{ 
Các vấn đề liên quan