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 awk
alan 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 .com
ve print $1
çıktıya yalnızca önceki bölümü verir .com
. Böylece, beklenen çıktıyı $1".com"
ekler .com
ve 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 vi
ve 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.
-s
ex
toplu kullanıma hazırlanmak üzere sessiz mod sağlar . (Çıktı mesajlarını bastırın vd.)
-c
dosya ( file.txt
bu ö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.
s
zaten bildiğiniz yedek komuttur. Gelişmiş regex özelliklerinden bazıları uygulamaya göre değişse de , yaygın olarak kullanılır vi
ve s
komutuylased
ö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) ex
uygulamada, ek bir -c
seçenek de kullanabilirsiniz , örneğin:
ex -sc '%s/\(\.com\).*/\1/' -c x file.txt
Ancak bu POSIX için gerekli değildir.
x
Komut çı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.
sed
sahte -i daha fazla değil . Diskteki arabellekleri okur / yazar. / W kendiniz görün ex -r
ve preserve
komuta.
preserve
Komut 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 .
.com
Sadece 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/Ubuntu
Listenizdeki gibi bir URL'niz olsaydı ne olurdu ?