Sed có thể lưu đầu ra của nó vào một tập tin không?


33

> có thể làm được.

echo "text" > file

tee có thể làm được.

echo "test" | tee file 

Có thể sedlàm điều đó mà không cần sử dụng một trong những điều trên? Có thể lưu đầu ra của sedlệnh vào một tệp mà không cần sử dụng >hoặc teekhông?


Hãy cố gắng tự tìm câu trả lời trước khi đăng câu hỏi tại đây. Điều đầu tiên chúng tôi yêu cầu người dùng của chúng tôi là tìm kiếm và nghiên cứu trước khi đăng. Tất cả những gì bạn cần làm là sed '' file > newfilevà bạn sẽ thấy điều đó >thực sự có thể được sử dụng sedgiống như với bất kỳ chương trình nào khác.
terdon

1
Đó vẫn là sử dụng >toán tử. Tôi đã quan tâm nếu có một lệnh sed có thể được sử dụng thay thế. Nhưng tôi sẽ xóa câu hỏi này nếu nó quá tệ.
Folatt

À, đúng rồi. OK, đó là một câu hỏi rất khác nhau. Vì bạn đã chấp nhận sed -icâu trả lời, tôi sẽ chỉnh sửa câu hỏi của bạn và làm rõ những gì bạn đang theo dõi.
terdon

Tôi đã chấp nhận " sed không có nghĩa là chuyển hướng dữ liệu tee>(có nghĩa là)".
Folatt

Câu trả lời:


49

tee và> có thể được sử dụng để chuyển hướng dữ liệu vì chúng được sử dụng để chuyển hướng dữ liệu trong linux.

Mặt khác, sed là một biên tập viên dòng. sed không có nghĩa là để chuyển hướng dữ liệu như tee và> có nghĩa là. Tuy nhiên, bạn có thể sử dụng kết hợp các lệnh để làm điều đó.

sử dụng tee hoặc> với sed

sed 's/Hello/Hi/g' file-name | tee file

hoặc là

sed 's/Hello/Hi/g' file-name > file

sử dụng sed với tùy chọn -i

sed -i 's/Hello/Hi/g' file-name

cái cuối cùng không chuyển hướng, thay vào đó nó sẽ thực hiện thay đổi trong chính tệp.


2
Cảm ơn. Bạn hiểu câu hỏi của tôi. Vì vậy, câu trả lời là không. Tôi nghĩ rằng sedchính nó có thể làm được, bởi vì nó cũng có khả năng tạo các tệp sao lưu với -i.baktùy chọn.
Folatt

2
Chính xác. Ngoài ra -i.bak không phải là một tùy chọn cố định, bạn có thể sử dụng bất kỳ tiện ích mở rộng nào mà bạn muốn có tệp sao lưu của mình. cho người cũ -i.log cũng sẽ hoạt động. :)
ankidaemon

Tôi chỉ muốn nói thêm rằng thực sự đang tìm kiếm echo "test" | dd of=file status=none, triệt tiêu đầu ra của tiếng vang mà không sử dụng chuyển hướng đầu ra tối nghĩa 2> /dev/null, nhưng thay vào đó lại yêu cầu các giới hạn của sed. Tôi thực sự bị ấn tượng bởi khả năng của sed vì nó có khả năng nối các dòng trong tệp, cho tôi cảm giác rằng sed có thể làm bất cứ điều gì tee có thể làm và hơn thế nữa.
Folatt

11

sedwlệnh có thể làm những gì bạn yêu cầu:

tên tập tin

Viết không gian mẫu hiện tại vào tên tệp.

sed 'w file'trên chính nó sẽ có tác dụng tương tự như tee file. Nếu có các lệnh sed khác, hãy đặt lệnh wcuối cùng:

sed 's/This/That/;w file'

Tuy nhiên, điều này sẽ không bị ảnh hưởng bởi -n/--quiet/--silenttùy chọn. Điều đó chỉ ngăn chặn nội dung mà nếu không đã đi đến đầu ra tiêu chuẩn.


0

Như ankidaemon đã chỉ ra một cách chính xác làm thế nào chúng ta có thể lưu đầu ra sed vào một tập tin. Tôi muốn thêm rằng nếu chúng tôi đang thực hiện một số thao tác trên một tệp tức là thay thế và muốn lưu kết quả đầu ra vào cùng một tệp. Có một -ilá cờ trong sedđó thực hiện các chỉnh sửa tại chỗ có thể. Điều này tuy nhiên tạo ra một tập tin sao lưu trong quá trình. Nếu điều đó là không cần thiết, điều đó có thể được thực hiện bằng cách chỉ cần chuyển tên tệp trống sang -icờ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.