Yanıtlar:
".Com" dan sonra gelen her şeyi açıkça silmek için ".com (herhangi bir şey)" yerine ".com" yerine mevcut sed çözümünüzü değiştirin:
sed 's/\.com.*/.com/' file.txt
İlk dönemden kaçmak için normal ifadenizi değiştirdim; aksi takdirde "thisiscommon.com/something" gibi bir şeyle eşleşirdi.
".Com" desenini, "sub.com.domain.com/foo" gibi bir şeyi yanlışlıkla kesmemek için sondaki eğik çizgi ile daha fazla tutturmak isteyebileceğinizi unutmayın:
sed 's/\.com\/.*/.com/' file.txt
Adlı kullanıcının awkalan ayırıcısını ( -F) aşağıdaki şekilde kullanabilirsiniz:
$ cat file
google.com/funny
unix.stackexchange.com/questions
isuckatunix.com/ireallydo
$ cat file | awk -F '\\.com' '{print $1".com"}'
google.com
unix.stackexchange.com
isuckatunix.com
Açıklama:
NAME
awk - pattern scanning and processing language
-F fs
--field-separator fs
Use fs for the input field separator (the value of the FS predefined variable).
Sonra her şeyi silmek istediğiniz gibi .com, -F '.com'satırı ayırır .comve print $1çıktıya yalnızca önceki bölümü verir .com. Böylece, beklenen çıktıyı $1".com"ekler .comve verir.
/FS olarak değil , ilk sahayı alsın?
acomercial.com/asdsad
Etkileşimli olmayan yerinde dosya düzenleme için en iyi araçtır ex.
ex -sc '%s/\(\.com\).*/\1/ | x' file.txt
Eğer kullandıysanız vive Hiç bir kolon ile başlayan bir komut yazdığınız takdirde :size eski bir komutu kullandım. Elbette, bu şekilde gerçekleştirebileceğiniz daha gelişmiş veya "süslü" komutların çoğu Vim uzantılarıdır (ör. :bufdo) Ve POSIX spesifikasyonlarındaex tanımlanmamıştır , ancak bu spesifikasyonlar görsel olmayanlarda gerçekten şaşırtıcı derecede güç ve esneklik sağlar metin düzenleme (etkileşimli veya otomatik).
Yukarıdaki komutun birkaç bölümü vardır.
-sextoplu kullanıma hazırlanmak üzere sessiz mod sağlar . (Çıktı mesajlarını bastırın vd.)
-cdosya ( file.txtbu örnekte) bir arabellekte açıldığında yürütülecek komutu belirtir .
%eşdeğeri bir adres belirtecidir 1,$—it arabellek tüm satırlarına aşağıdaki komutun uygulandığı anlamına gelir.
szaten bildiğiniz yedek komuttur. Gelişmiş regex özelliklerinden bazıları uygulamaya göre değişse de , yaygın olarak kullanılır vive skomutuylased özdeş özelliklere sahiptir . Bu durumda ".com" dan satırın sonuna kadar sadece ".com" ile değiştirilir.
Dikey çubuk, yürütülecek sıralı komutları ayırır. Birçok (en) exuygulamada, ek bir -cseçenek de kullanabilirsiniz , örneğin:
ex -sc '%s/\(\.com\).*/\1/' -c x file.txt
Ancak bu POSIX için gerekli değildir.
xKomut çıkışları, dosyada herhangi bir değişiklik yazdıktan sonra. wq"Yaz ve çık" ifadesinin aksine x, dosyaya yalnızca arabellek düzenlenmişse yazar. Böylece dosyanız değiştirilmezse, zaman damgası korunur.
sedsahte -i daha fazla değil . Diskteki arabellekleri okur / yazar. / W kendiniz görün ex -rve preservekomuta.
preserveKomut nedir?
Çok hızlı, basit ve kirli python yolu:
#!/usr/bin/env python
import sys
with open( sys.argv[1] ) as file:
for line in file:
print line.split("/")[0]
Örnek çalışma
skolodya@ubuntu:$ chmod +x removeStrings.py
skolodya@ubuntu:$ ./removeStrings.py strings.txt
google.com
unix.stackexchange.com
isuckatunix.com
skolodya@ubuntu:$ cat strings.txt
google.com/funny
unix.stackexchange.com/questions
isuckatunix.com/ireallydo
.com, sadece /satırdaki ilk ile başlayan her şeyi kaldırır . (bence daha iyi bir yaklaşım bile!)
.net, diğer yaklaşımlarda etki alanı ve uzantıdan sonra gelen bölüm silinmez, bu nedenle /ayırıcı olarak kullanmak daha güvenlidir .
.comSadece ilk/karakterden sonra ve ilk karakter dahil olmak üzere her şeyi kaldırmak yerine aramak istediğiniz belirli bir neden var mı ?en.wikipedia.org/wiki/UbuntuListenizdeki gibi bir URL'niz olsaydı ne olurdu ?