Chuẩn bị ## cho mỗi dòng trong tệp văn bản


30

Tôi muốn thêm băm vào tất cả các dòng trong một tệp văn bản thông thường. Tôi ổn với cả việc sử dụng thiết bị đầu cuối và GUI. Tôi chỉ cần hoàn thành nó.

Câu trả lời:


50

Bạn có thể sử dụng sedđể làm điều đó:

sed -i.bak 's/^/##/' file

Điều này thay thế bắt đầu của dòng ( ^) bằng ##.

Với công -i.baktắc, sedchỉnh sửa tệp tại chỗ, nhưng tạo bản sao lưu có phần mở rộng .bak.


1
+1 Đây là lần đầu tiên tôi gặp phương pháp sao lưu này. Tôi luôn luôn thay thế trực tiếp : sed 's/^/##/' -i file. Trong trường hợp này, điều này sẽ được ưu tiên vì nó không thể sai. Trong các trường hợp khác, lệnh này có thể được kết hợp với diff -u file.bak fileđể xem sự khác biệt (nếu cần, chuyển nó qua less). Nếu nó được xác nhận để hoạt động, sao lưu có thể được gỡ bỏ. Nếu không, nó có thể được khôi phục với một đơn giản mv file.bak file.
Lekensteyn

1
Thanh lịch. Tôi đã suy nghĩ về một cái gì đó như thế sed 's/^\(.*\)$/##\1/', nhưng điều này đẹp hơn nhiều.
sắp xếp

Thật tuyệt .. Tôi đã suy nghĩ về việc đề nghị Vim làm điều này ...
Sathish

Điều này giúp tôi chuyển đổi một tập tin danh sách khối :) Cảm ơn bạn 1+
Neil

8

Đây là một giải pháp cho vấn đề này bằng cách sử dụng perl

perl -e 'while (<>) {print "##$_"}' < infile > outfile

2
Việc -pchuyển đổi cũng hữu ích : perl -pe 's/^/##/' infile > outfile. (Ngoài ra còn có công -i[extension]tắc để thay thế tệp mục tiêu tại chỗ.) Perldoc.perl.org/perlrun.html#%2a-p%2a
Jukka Matilainen

6

Trong khi chúng ta đang ở đó:

gawk -i inplace '{print "##"$0}' infile

Điều này sử dụng plugin chỉnh sửa tại chỗ (tương đối mới) cho GNU awk 4.1.0+.


4

Đây là một bashcách:

while read -r; do printf '##%s\n' "$REPLY"; done < infile > outfile

( Trong bashshell , chạy read -rkhông có đối số nào khác hoạt động như IFS= read -r REPLY.)

Điều này được lấy cảm hứng từ phong cách của giải pháp perl của beav_35 , mà tôi thừa nhận có thể chạy nhanh hơn nhiều đối với các tệp lớn, vì perlcó thể được dự kiến ​​sẽ hiệu quả hơn so với trình bao khi xử lý văn bản.


3

sed -ikhông phải là tiêu chuẩn POSIX, vì vậy nếu bạn là người theo chủ nghĩa thuần túy, bạn sẽ muốn sử dụng ed:

printf ",s/^/##/\nw\nq" | ed -s file.txt

3

Đây là một perlcách dễ dàng hơn so với trình bày ở nơi khác:

perl -pi -e 'print "##"' YOURFILEHERE

(Ab) này sử dụng thực tế là perl -pin dòng sau khi thực hiện lệnh được đưa vào -e.


0

Bạn có thể sử dụng Vim trong chế độ Ex:

ex -sc '%s/^/##/|x' file
  1. % chọn tất cả các dòng

  2. s thay thế

  3. x lưu và đóng


0

Có thể được thực hiện với chức năng ánh xạ của python và chuyển hướng stdin:

$ cat input.txt                                                                                                          
lorem ipsum
quick brown fox
hello world
$ python -c 'import sys;print "".join(map(lambda x: "##"+x,sys.stdin.readlines()))'  < input.txt                         
##lorem ipsum
##quick brown fox
##hello world

Lưu đầu ra vào tập tin mới và sử dụng nó thay vì ban đầu

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.