Bir metin dosyasındaki her satıra ## Prepend


30

Normal bir metin dosyasındaki tüm satırlara karma değerler eklemek istiyorum. Hem terminal hem de GUI kullanımında iyiyim; sadece halletmem gerekiyor.

Yanıtlar:


50

Bunu sedyapmak için kullanabilirsiniz :

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

Bu, satırın başlangıcını ( ^) ile değiştirir ##.

-i.bakAnahtar ile seddosyayı yerinde düzenler, ancak uzantılı bir yedek kopya oluşturur .bak.


1
+1 Bu yedekleme yöntemiyle ilk karşılaştığımda. Hep bir satır içi doğrudan yerine vermedi: sed 's/^/##/' -i file. Bu durumda, yanlış gidemeyeceği için bu tercih edilir. Diğer durumlarda, bu komut diff -u file.bak filefarklılıkları görmek için bir araya getirilebilir (gerekirse boru üzerinden iletilir less). Çalışması onaylanırsa, yedekleme kaldırılabilir. Aksi takdirde basit bir şekilde restore edilebilir mv file.bak file.
Lekensteyn

1
Zarif. Gibi bir şey düşünüyordum sed 's/^\(.*\)$/##\1/', ama bu çok daha hoş.
düzenleme

Güzel bir tane .. Vim'e bunu yapmasını önermeyi düşünüyordum ...
Sathish

Bu, bir blok liste dosyasını dönüştürmeme yardım etti :) 1+
Neil

8

İşte perl kullanarak bu soruna bir çözüm

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

2
-pAnahtar da faydalı olacaktır: perl -pe 's/^/##/' infile > outfile. ( -i[extension]Hedef dosyayı yerinde yerine koyma
Jukka Matilainen


4

İşte bir bashyol:

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

( In bashkabuğu , koşma read -rbaş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ü perlmetin işleme söz konusu olduğunda bir kabuktan daha verimli olması beklenebilir.


3

sed -iPOSIX standardı değildir, bu yüzden bir safkansanız kullanmak isteyeceksiniz ed:

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

3

perlBaşka bir yerde sunulmasından daha kolay bir yol:

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

Bu (ab) perl -pverilen komutu yürüttükten sonra satırı basan gerçeği kullanır -e.


0

Vim'i Ex modunda kullanabilirsiniz:

ex -sc '%s/^/##/|x' file
  1. % tüm satırları seç

  2. s vekil

  3. x kaydet ve kapat


0

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.