Câu trả lời:
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.bak
tắc, sed
chỉnh sửa tệp tại chỗ, nhưng tạo bản sao lưu có phần mở rộng .bak
.
sed 's/^\(.*\)$/##\1/'
, nhưng điều này đẹp hơn nhiều.
Đâ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
-p
chuyể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
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+.
Đây là một bash
cách:
while read -r; do printf '##%s\n' "$REPLY"; done < infile > outfile
( Trong bash
shell , chạy read -r
khô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ì perl
có thể được dự kiến sẽ hiệu quả hơn so với trình bao khi xử lý văn bản.
Bạn có thể sử dụng Vim trong chế độ Ex:
ex -sc '%s/^/##/|x' file
%
chọn tất cả các dòng
s
thay thế
x
lưu và đóng
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
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ớidiff -u file.bak file
để xem sự khác biệt (nếu cần, chuyển nó qualess
). 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ảnmv file.bak file
.