jak zobaczyć zawartość pliku (plik cat), ale wyeliminować określony ciąg w wielu wierszach

1

Mam taki plik:

ins.pro.server.pro.net
ins.pro-server2.pro.net
ins.pro-server3.pro.net
ins.pro-server4.pro.net

Chciałbym skasować ten plik, ale eliminując określony ciąg „.pro.net” ze wszystkich wierszy, więc może wynikać tak:

ins.pro-server
ins.pro-server2
ins.pro-server3
ins.pro-server4

Z góry dziękuję za pomoc

P.S: Użyłem wcześniej niektórych opcji sed, ale usunął także pierwszą część z „ins.pro-server”, pozostawiając ją jako „ins.-server”

Juan Manher
źródło

Odpowiedzi:

-2

Robię to z pamięci, ale uważam, że powinny działać:

cat $ file | sed s / pro.net //

Odniesienie: Samouczek Sed autorstwa Bruce'a Barnetta

MVP (poniżej) jest poprawny. Z jakiegoś powodu moje ukośniki na kropkach nie przeszły (chyba muszę uciec od nich?). Ponadto kot jest zbędny, ponieważ możesz po prostu dodać argument pliku na końcu, tak jak sugerował MVP.

(Skomentowałem jego odpowiedź, ale nie mam jeszcze 50 rep) (Ukośniki odwrotne w mojej odpowiedzi pierwotnie brakowały, ponieważ nie uniknąłem ich)

Kael Lizak
źródło
4

Użyj tego:

sed "s/\.pro\.net//g" file

Po pierwsze, nie potrzebujesz kota, po drugie, upewnij się, że używasz \. zamiast po prostu ., ponieważ środek kropki pasuje do dowolnego symbolu. Może się wydawać, że działa, ale pasowałby również do ciągu xproynet, co prawdopodobnie nie jest tym, czego chcesz.

mvp
źródło
Używanie pojedynczych cudzysłowów zamiast podwójnych cudzysłowów sed polecenia (np. sed 's/\.pro\.net//g' file ) jest dobrym nawykiem.
G-Man
@ G-man: to tylko kwestia osobistych preferencji. Wolę używać podwójnych cudzysłowów dla łańcuchów, ponieważ jest to sposób C / C ++. W powłoce oba działają dobrze
mvp
To tylko kwestia osobistych preferencji, dopóki Twój sklep nie będzie sprzedawał za pół ceny i chcesz edytować swój cennik za pomocą sed "s/$2/$1/g". Chodzi mi o to sed Polecenia często zawierają w sobie elementy, które są interpretowane przez powłokę, jeśli są w podwójnym cudzysłowie.
G-Man