Tambahkan ## ke setiap baris dalam file teks

30

Saya ingin menambahkan hash ke semua baris dalam file teks biasa. Saya baik-baik saja dengan penggunaan terminal dan GUI — saya hanya perlu menyelesaikannya.

Oxwivi
sumber

Jawaban:

50

Anda dapat menggunakannya seduntuk melakukan itu:

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

Ini menggantikan awal baris ( ^) dengan ##.

Dengan -i.baksakelar, sededit file di tempat, tetapi buat salinan cadangan dengan ekstensi .bak.

Jukka Matilainen
sumber
1
+1 Ini adalah pertama kalinya saya menemukan metode cadangan ini. Saya selalu tidak inline menggantikan secara langsung: sed 's/^/##/' -i file. Dalam hal ini, ini lebih disukai karena tidak salah. Dalam kasus lain, perintah ini dapat digabungkan dengan diff -u file.bak fileuntuk melihat perbedaan (jika perlu, pipa melalui less). Jika dikonfirmasi berhasil, cadangan dapat dihapus. Kalau tidak bisa dipulihkan dengan sederhana mv file.bak file.
Lekensteyn
1
Anggun. Saya sedang memikirkan sesuatu seperti sed 's/^\(.*\)$/##\1/', tetapi ini jauh lebih baik.
mengatur
Bagus .. Saya sedang berpikir untuk menyarankan Vim untuk melakukan ini ...
Sathish
Ini membantu saya mengonversi file daftar blokir :) Terima kasih 1+
Neil
8

Berikut adalah solusi untuk masalah ini menggunakan perl

perl -e 'while (<>) {print "##$_"}' < infile > outfile
beav_35
sumber
2
The -pswitch juga berguna: perl -pe 's/^/##/' infile > outfile. (Ada juga -i[extension]saklar untuk mengganti file target di tempat.) Perldoc.perl.org/perlrun.html#%2a-p%2a
Jukka Matilainen
6

Sementara kita berada di dalamnya:

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

Ini menggunakan plugin pengeditan di tempat (relatif baru) untuk GNU awk 4.1.0+.

muru
sumber
4

Begini bashcaranya:

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

( Dalam bashshell , menjalankan read -rtanpa argumen lain bekerja seperti IFS= read -r REPLY.)

Ini secara gaya terinspirasi oleh solusi perl beav_35 , yang saya akui mungkin berjalan jauh lebih cepat untuk file besar, karena perlmungkin diharapkan lebih efisien daripada sebuah shell ketika datang ke pemrosesan teks.

Eliah Kagan
sumber
3

sed -ibukan POSIX-standar, jadi jika Anda seorang purist Anda ingin menggunakan ed:

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

Berikut perlcara yang lebih mudah daripada yang disajikan di tempat lain:

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

Ini (ab) menggunakan fakta yang perl -pmencetak baris setelah mengeksekusi perintah yang diberikan -e.

abligh
sumber
0

Anda dapat menggunakan Vim dalam mode Ex:

ex -sc '%s/^/##/|x' file
  1. % pilih semua garis

  2. s pengganti

  3. x Simpan dan tutup

Steven Penny
sumber
0

Dapat dilakukan dengan fungsi pemetaan python dan mengarahkan 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

Simpan output ke file baru dan gunakan bukan yang asli

Sergiy Kolodyazhnyy
sumber