2013-04-12 44 views
50

Tôi đang trên dòng lệnh Linux và tôi có tập tin vớithêm văn bản vào cuối mỗi dòng

127.0.0.1 
128.0.0.0 
121.121.33.111 

Tôi muốn

127.0.0.1:80 
128.0.0.0:80 
121.121.33.111:80 

Tôi nhớ đồng nghiệp của tôi đang sử dụng sed cho rằng, nhưng sau khi đọc hướng dẫn sử dụng sed vẫn không rõ ràng làm thế nào để làm điều đó trên dòng lệnh?

Trả lời

80

Bạn có thể thử sử dụng một cái gì đó như:.

sed 's/$/:80/' ips.txt > new-ips.txt 

** Với điều kiện là định dạng tập tin của bạn là giống như bạn đã mô tả trong câu hỏi của bạn *

Các trận đấu lệnh s/// thay thế (thấy) cuối mỗi dòng trong tệp của bạn (sử dụng ký tự $) và sau đó nối thêm (thay thế) :80 vào cuối mỗi dòng. Các tập tin ips.txt là tập tin đầu vào của bạn ... và new-ips.txt là tập tin mới tạo (kết quả cuối cùng của những thay đổi của bạn.)


Ngoài ra, nếu bạn có một danh sách các số IP mà xảy ra để có số cổng gắn liền rồi, (như đã nêu bởi Vlad và như được đưa ra bởi aragaer,), bạn có thể thử sử dụng một cái gì đó như:

sed '/:[0-9]*$/ ! s/$/:80/' ips.txt > new-ips.txt 

vì vậy, ví dụ, nếu tập tin đầu vào của bạn trông giống như này (chú ý :80):

127.0.0.1 
128.0.0.0:80 
121.121.33.111 

Kết quả cuối cùng sẽ giống như thế này:

127.0.0.1:80 
128.0.0.0:80 
121.121.33.111:80 
+0

Nó sẽ nối thêm ': 80' vào dòng có': 80' đã được nối thêm? – Vlad

+0

@Vlad Có; nhưng theo OPs cho ví dụ đầu vào ... không nên có bất kỳ số cổng nào trong danh sách các IP. :) Ngay cả khi có ... OP có thể chạy một sed 's ///' trước đó để lấy ra bất kỳ số cổng nào ở cuối mỗi dòng. – summea

+1

Ok, chỉ cần làm rõ ... Có lẽ phải có điều kiện để loại trừ các dòng nơi cổng đã tồn tại. – Vlad

10
sed 's/.*/&:80/' abcd.txt >abcde.txt 
8

Nếu bạn muốn thêm văn bản vào cuối mỗi dòng tại chỗ (trong cùng một tệp), bạn có thể sử dụng -i tham số, ví dụ:

sed -i'.bak' 's/$/:80/' foo.txt 

Tuy nhiên -i lựa chọn là n tiện ích mở rộng Unix chuẩn và có thể không có sẵn trên tất cả các hệ điều hành.

Vì vậy, bạn có thể xem xét sử dụng ex (tương đương với vi -e/vim -e):

ex +"%s/$/:80/g" -cwq foo.txt 

mà sẽ thêm :80 với từng ngành nghề, nhưng đôi khi nó có thể thêm nó vào dòng trống.

Vì vậy, phương pháp tốt hơn là để kiểm tra xem dòng thực sự chứa bất kỳ số, và sau đó thêm nó, ví dụ:

ex +"g/[0-9]/s/$/:80/g" -cwq foo.txt 

Nếu tập tin có định dạng phức tạp hơn, xem xét sử dụng regex đúng, thay vì [0-9].

0

Sử dụng trình chỉnh sửa văn bản, kiểm tra ^M (điều khiển-M hoặc trả về vận chuyển) ở cuối mỗi dòng. Bạn sẽ cần xóa chúng trước, sau đó thêm văn bản bổ sung ở cuối dòng.

sed -i 's|^M||g' ips.txt 
sed -i 's|$|:80|g' ips.txt 
Các vấn đề liên quan