Dalam file dengan banyak baris saya ingin menghapus baris yang dimulai dengan HERE IT IS
.
Bagaimana saya bisa melakukan ini hanya dengan menggunakan alat baris perintah?
command-line
text-processing
micgeronimo
sumber
sumber
vim
sepertivim '+g/^HERE IT IS/d' +wq test.txt
Jawaban:
Coba
sed
:PERINGATAN: Lebih baik mengambil cadangan saat menggunakan
-i
sakelarsed
:File asli akan tetap
<file>.bak
dan file yang diubah akan<file>
.sumber
sed -i 's/^HERE IT IS/HERE IT IS\n/' <file>
sed '/^HERE IT IS/G' file
.Selain jawaban yang sangat bagus
grep
dan yangsed
Anda terima, berikut adalah beberapa alat lain yang dapat melakukan hal yang sama:Beberapa cara Perl:
Anda dapat menambahkan
-i
peralihan ke salah satu contoh untuk mengedit file di tempat:(melongo
Versi yang lebih baru (4.1.1 dan yang lebih baru) dari GNU
awk
(defaultawk
pada Linux) juga dapat mengedit file di tempat:Shell (
bash
,zsh
,ksh
, mungkin orang lain). Ini agak konyol, itu bisa dilakukan tetapi alat lain lebih baik.sumber
bash
membuat saya LOL)printf "%s\n" "$line"
: mengutip $ line untuk mempertahankan spasi putih, dan menghindari beberapa masalah gema (menafsirkan karakter khusus, dll). dan menghindari kebutuhan untuk menambahkan--
juga.IFS=
dan-r
, saya mungkin juga berusaha keras dan membuatnya kuat.Saya akan gunakan
grep
untuk memfilternya. Sebagai contoh :Kemudian pindahkan file outfile kembali ke infile.
sumber
sed
jelas merupakan cara untuk pergi.Ini sedikit modifikasi dari perintah @heemayl memberi Anda akan menghapus baris apakah kasus yang sama digunakan dalam pola atau tidak, karena I dalam referensi pola.
Jika Anda memiliki beberapa file dalam direktori yang Anda inginkan, Anda dapat menggabungkannya dengan find seperti itu.
Opsi maxdepth berarti ini tidak akan muncul kembali ke direktori.
sumber
Opsi python lain:
Di mana f adalah path ke file, di antara tanda kutip.
sumber
Grep
(?!HERE IT IS)
pernyataan lookahead negatif yang membuat mesin regex untuk mencocokkan semua garis batas mulai ( yang biasanya cocok dengan^
) hanya jika tidak diikuti oleh stringHERE IT IS
ular sanca
Simpan skrip dalam file, ucapkan
script.py
dan kemudian jalankan melalui perintah di bawah ini di terminal.sumber
[print(l, end = "") for l in open(fil).readlines() if not re.match("HERE IT IS", l)]
, tapi itu tidak jauh lebih efisien daripadastartswith
. Saya bertanya-tanya bagaimana[print(l, end = "") for l in open(f).readlines() if not l.startswith("HERE IT IS")]
tidak akan menghasilkan output dalam daftar.Anda dapat menggunakan Vim dalam mode Ex:
g
pencarian globald
menghapusx
Simpan dan tutupsumber