2011-10-05 37 views
22

Tôi có một tệp r. Tôi muốn thay thế các từ FileMINvac.pdb trong đó không có gì. Lệnh tôi sử dụng là:kết hợp 2 lệnh sed

sed -i 's/File//g' /home/kanika/standard_minimizer_prosee/r 

sed -i 's/MINvac.pdb//g' /home/kanika/standard_minimizer_prosee/r 

Tôi muốn kết hợp cả hai sed lệnh thành một nhưng tôi không biết đường đi. Có ai giúp được không?

Các tập tin trông giống như:

-6174.27 File10MINvac.pdb 
-514.451 File11MINvac.pdb 
4065.68  File12MINvac.pdb 
-4708.64 File13MINvac.pdb 
6674.54  File14MINvac.pdb 
8563.58  File15MINvac.pdb 

Trả lời

41

sed là một ngôn ngữ kịch bản. Bạn tách các lệnh bằng dấu chấm phẩy hoặc dòng mới. Nhiều phương ngữ sed cũng cho phép bạn chuyển từng lệnh dưới dạng đối số tùy chọn -e riêng biệt.

sed -i 's/File//g;s/MINvac\.pdb//g' /home/kanika/standard_minimizer_prosee/r 

Tôi cũng đã thêm một dấu gạch chéo để trích dẫn đúng dấu chấm đen trước pdb, nhưng trong bối cảnh hạn chế này mà có lẽ không quan trọng.

Để hoàn chỉnh, dưới đây là biến thể dòng mới. Nhiều người mới đến bị bối rối rằng shell cho phép các dòng mới trong chuỗi được trích dẫn, nhưng nó có thể thuận tiện.

sed -i 's/File//g 
    s/MINvac\.pdb//g' /home/kanika/standard_minimizer_prosee/r 

Tất nhiên, trong trường hợp giới hạn này, bạn cũng có thể kết hợp tất cả mọi thứ vào một regex:

sed -i 's/\(File\|MINvac\.pdb\)//g' /home/kanika/standard_minimizer_prosee/r 

(Một số sed tiếng địa phương sẽ muốn điều này mà không gạch chéo ngược, và/hoặc cung cấp một tùy chọn để sử dụng mở rộng BSD sed và do đó cũng có MacOS sed, yêu cầu đối số bắt buộc là sed -i, tuy nhiên, có thể trống, như sed -i ''.)

+0

cảm ơn bạn..Điều này đã hoạt động tốt .. – kanika

+0

Cảm ơn bạn đã giới thiệu về cách sử dụng nhiều cờ, mỗi câu cho mỗi câu lệnh trong tập lệnh. Có một lá cờ riêng biệt cho lệnh 'i' là một cách hay để đảm bảo lệnh 'i' bị chấm dứt khi viết kịch bản lệnh oneliner sed. – IllvilJa

19

Sử dụng -e cờ:

sed -i -e 's/File//g' -e 's/MINvac.pdb//g' /home/kanika/standard_minimizer_prosee/r 

Khi bạn nhận được nhiều lệnh hơn là thuận tiện để xác định với -e s, nó là tốt hơn để lưu trữ các lệnh trong một file riêng biệt và bao gồm nó với -f cờ.

Trong trường hợp này, bạn sẽ tạo một tập tin có chứa:

s/File//g 
s/MINvac.pdb//g 

Hãy gọi tập tin đó 'sedcommands'. sau đó bạn muốn sử dụng nó với sed như thế này:

sed -i -f sedcommands /home/kanika/standard_minimizer_prosee/r 

Với chỉ hai lệnh, nó có lẽ không đáng giá bằng một tập tin riêng biệt của lệnh, nhưng nó là khá tiện lợi nếu bạn có rất nhiều biến đổi để thực hiện.

+0

whatis các idead đằng sau -f cờ? – kanika

+2

Ông chắc chắn đã cố gắng giải thích nó. Với '-f' bạn có thể đặt tập lệnh của mình vào một tệp thay vì trên dòng lệnh' sed'.(Trong trường hợp này, nó có lẽ không phải là rất hữu ích, mặc dù.) – tripleee

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