Yanıtlar:
Bunu sed
yapmak için kullanabilirsiniz :
sed -i.bak 's/^/##/' file
Bu, satırın başlangıcını ( ^
) ile değiştirir ##
.
-i.bak
Anahtar ile sed
dosyayı yerinde düzenler, ancak uzantılı bir yedek kopya oluşturur .bak
.
sed 's/^\(.*\)$/##\1/'
, ama bu çok daha hoş.
İşte perl kullanarak bu soruna bir çözüm
perl -e 'while (<>) {print "##$_"}' < infile > outfile
-p
Anahtar da faydalı olacaktır: perl -pe 's/^/##/' infile > outfile
. ( -i[extension]
Hedef dosyayı yerinde yerine koyma
Biz varken:
gawk -i inplace '{print "##"$0}' infile
Bu (nispeten yeni) GNU awk 4.1.0+ için yerinde düzenleme eklentisini kullanır.
İşte bir bash
yol:
while read -r; do printf '##%s\n' "$REPLY"; done < infile > outfile
( In bash
kabuğu , koşma read -r
başka argümanlarla gibi çalışır IFS= read -r REPLY
.)
Bu, büyük işlemler için muhtemelen çok daha hızlı çalıştığını kabul ettiğim beav_35'in perl çözümünden stilisten esinlenildi çünkü perl
metin işleme söz konusu olduğunda bir kabuktan daha verimli olması beklenebilir.
Vim'i Ex modunda kullanabilirsiniz:
ex -sc '%s/^/##/|x' file
%
tüm satırları seç
s
vekil
x
kaydet ve kapat
Python'un haritalama işlevi ve stdin yönlendirmesiyle yapılabilir:
$ 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
Çıkışı yeni dosyaya kaydedin ve orijinal yerine kullanın
sed 's/^/##/' -i file
. Bu durumda, yanlış gidemeyeceği için bu tercih edilir. Diğer durumlarda, bu komutdiff -u file.bak file
farklılıkları görmek için bir araya getirilebilir (gerekirse boru üzerinden iletilirless
). Çalışması onaylanırsa, yedekleme kaldırılabilir. Aksi takdirde basit bir şekilde restore edilebilirmv file.bak file
.