Saya punya file html. Saya ingin menghapus semua baris yang tidak dimulai <tr>
.
Saya mencoba:
cat my_file | sed $'
s/^[^tr].*//
' | sed '/^$/d'
tapi itu menghapus semua baris.
text-processing
sed
Michael Durrant
sumber
sumber
grep
.s/^[^tr]...
cocok dengan garis yang dimulai dengan karakter apa pun selaint
ataur
. Kurung kotak adalah rentang karakter dalam suatu regex.Jawaban:
Coba ini dengan sed GNU:
atau
sumber
!d
sangat berguna karena memungkinkan Anda untuk menulis perintah sed lain dalam ekspresi, sedangkanp
hanya mencetak kecocokan, tetapi perintah selanjutnya memiliki input yang tidak dikunci.Bagian di antaranya
/
adalah regex. Thed
perintah menghapus garis yang cocok.Perbarui: oops, maaf saya melihat Anda berkata TIDAK. Begitu
Di mana
!
meniadakan arti pertandingan.sumber
Jika harus
sed
:-i
mengedit file di tempat,-n
mencegahsed
untuk mencetak semua baris, ekspresi reguler berarti untuk mencocokkan semua baris yang dimulai (^
) dengan<tr>
dan baris-baris itu akan dicetak (p
).Dengan
grep
:Dengan
-E
interpretasi grep, diperpanjang ekspresi reguler.Dengan
awk
:Atau murni
bash
:Ini
[[
adalah ekspresi kondisional internal bashs. Kami membandingkan$l
dengan ekspresi reguler dan jika berhasil (&&
) kami mencetak baris denganecho
.sumber
"$l"
. Dan Anda meletakkannya sebagai argumen pertama padaecho
baris perintah, jadi Anda akan memiliki masalah jika dimulai dengan a-option
. (Gunakanprintf '%s\n' "$l"). Also, shell
read` harus membaca satu-byte-pada-waktu, jadi itu sangat lambat. Memproses file teks dalam bash murni biasanya bukan pilihan yang baik kecuali Anda tahu file Anda sangat kecil.Jawaban termudah dan paling sederhana adalah:
Ini akan mencetak file dengan hanya baris yang dimulai dengan yang mungkin bagus jika Anda tidak ingin memodifikasi file secara langsung (seperti dengan sed).
Kemudian, jika Anda menyukai apa yang Anda lihat di output, Anda cukup mencetak ke file
> file
Dalam hal ini Anda menghemat waktu untuk membuat cadangan file Anda sebelum mencoba beberapa perintah.
sumber