GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara menghapus awalan kata menggunakan grep?

Seperti yang telah dicatat oleh orang lain, grep tidak cocok untuk tugas ini, sed adalah pilihan yang baik, atau jika teks tertata dengan baik, gunakan cut sederhana mungkin lebih mudah untuk mengetik:

echo www.abc.com | cut -d. -f2-
  • -d. memberi tahu cut untuk menggunakan . sebagai pembatas.
  • -f2- memberi tahu cut untuk mengembalikan bidang 2 hingga tak terbatas.

dengan --only-matching grep dan \K

Anda dapat melakukan ini dengan --only-matching grep bendera:

echo "www.abc.com" | grep --perl-regexp --only-matching 'www.\K.*'

yang dapat disingkat menjadi

echo "www.abc.com" | grep -Po 'www.\K.*'

Kedua perintah tersebut menghasilkan

abc.com

dengan grep (GNU grep) 3.3.

Alih-alih echo , saya akan menggunakan string di sini untuk mempersingkat perintah lebih lanjut:

grep -Po 'www.\K.*' <<< "www.abc.com"

\K mengatur ulang titik awal pertandingan, pada dasarnya melupakan "www." yang cocok. Lihat ini untuk informasi lebih lanjut tentang \K .

dengan tampilan positif grep

Anda juga dapat melakukannya dengan pandangan positif:

grep -Po '(?<=www.).*' <<< "www.abc.com"

dengan pemisah kolom awk -F

awk -F 'www.' <<< "www.abc.com" '$2{print $2}'

Ini mencetak

abc.com

$2{print $2} part akan mencetak bidang kedua jika ditentukan. Hal ini diperlukan dalam kasus masukan multi-baris untuk menghindari keluaran baris kosong untuk baris masukan yang tidak berisi pemisah bidang.


Anda tidak mengedit string dengan grep di shell Unix, grep biasanya digunakan untuk mencari atau menghapus beberapa baris dari teks. Anda lebih suka menggunakan sed sebagai gantinya:

$ echo www.example.com | sed 's/^[^\.]\+\.//'
example.com

Anda harus mempelajari ekspresi reguler untuk menggunakannya secara efektif.

Sed juga dapat mengedit file di tempat (memodifikasi file), jika Anda meneruskan -i argumen, tapi hati-hati, Anda dapat dengan mudah kehilangan data jika Anda salah menulis sed perintah dan gunakan -i bendera.

Contoh

Dari komentar Anda, tebak Anda memiliki dokumen TeX, dan Anda ingin menghapus bagian pertama dari semua nama domain .com. Jika itu adalah dokumen Anda test.tex :

\documentclass{article}
\begin{document}
www.example.com
example.com www.another.domain.com
\end{document}

maka Anda dapat mengubahnya dengan sed ini perintah (redirect output ke file atau edit di tempat dengan -i ):

$ sed 's/\([a-z0-9-]\+\.\)\(\([a-z0-9-]\+\.\)\+com\)/\2/gi' test.tex 
\documentclass{article}
\begin{document}
example.com
example.com another.domain.com
\end{document}

Harap diperhatikan bahwa:

  • Urutan umum dari simbol yang diperbolehkan diikuti dengan titik dicocokkan dengan [a-z0-9-]\+\.
  • Saya menggunakan grup dalam ekspresi reguler (sebagian di dalam \( dan \) ) untuk menunjukkan bagian pertama dan kedua dari URL, dan saya mengganti seluruh kecocokan dengan grup kedua (\2 dalam pola substitusi)
  • Domain setidaknya harus domain .com level 3 (setiap \+ pengulangan berarti setidaknya satu kecocokan)
  • Penelusuran tidak peka huruf besar/kecil (i bendera pada akhirnya)
  • Hal ini dapat melakukan lebih dari pencocokan per baris (g bendera pada akhirnya)

Anda dapat melakukannya menggunakan grep dengan mudah:

$ echo www.google.com | grep -o '[^.]*\.com'
google.com

Alih-alih echo Anda harus memberikan file Anda.

$ grep -o '[^.]*\.com$' < file

Di sini saya menggunakan ekspresi reguler '[^.]*.com'. Artinya:temukan saya kata tanpa . di dalamnya ([^.]* ), lalu lanjutkan .com (\.com di kembali). -o kunci mengatakan bahwa grep harus menunjukkan hanya bagian yang ditemukan.


Linux
  1. Cara Menemukan Teks Tertentu menggunakan GREP di Linux

  2. Debian:Cara Menginstal atau Menghapus Paket DEB Menggunakan dpkg

  3. Cara Menghapus Partisi Disk menggunakan Parted Command

  1. Bagaimana Menyoroti Kata Dalam Output "kucing"??

  2. Cara Menghapus File Lebih Lama dari N hari menggunakan tmreaper di Linux

  3. Bagaimana cara menghapus file tanpa menggunakan rm?

  1. Bagaimana cara saya grep secara rekursif?

  2. Cara menghapus karakter non-ascii menggunakan sed

  3. Cara grep \n dalam file