Jestem w linii poleceń Linuksa i mam plik z
127.0.0.1
128.0.0.0
121.121.33.111
chcę
127.0.0.1:80
128.0.0.0:80
121.121.33.111:80
Pamiętam, że moi koledzy używali do tego seda, ale po przeczytaniu instrukcji seda nadal nie wiem, jak to zrobić w linii poleceń?
Odpowiedzi:
Możesz spróbować użyć czegoś takiego:
Pod warunkiem, że format pliku jest taki, jak opisano w pytaniu.
Polecenie
s///
podstawienia dopasowuje ( znajduje ) koniec każdego wiersza w pliku (przy użyciu$
znaku), a następnie dodaje ( zastępuje ) znak:80
na końcu każdego wiersza.ips.txt
Plik jest plik wejściowy ... inew-ips.txt
to nowo utworzony plik ( ostateczny wynik zmian. )Ponadto, jeśli masz listę numerów IP, które mają już dołączone numery portów (jak zauważył Vlada i podał aragaer ), możesz spróbować użyć czegoś takiego:
Na przykład, jeśli twój plik wejściowy wyglądał mniej więcej tak (zwróć uwagę na
:80
) :Ostateczny wynik wyglądałby mniej więcej tak:
źródło
sed '/:[0-9]*$/ ! s/$/:80/'
:80
zostanie dodany na początku następnego wiersza. Wdos2unix
razie potrzeby użyj najpierw na pliku.-n
konieczne? prawdopodobnie nie dla większości użytkowników.Zwięzła wersja polecenia sed :
Wyjaśnienie:
sed
s TREAM wyd itor-i
i n-place (edytuj plik w miejscu)s
s polecenia ubstitution/replacement_from_reg_exp/replacement_to_text/
komunikat$
dopasowuje koniec wiersza ( replace_from_reg_exp ):80
tekst, który chcesz dodać na końcu każdej linii ( zamiana_na_tekst )file.txt
nazwa plikuźródło
źródło
Jeśli chcesz dodać tekst na końcu każdego wiersza w miejscu (w tym samym pliku), możesz użyć
-i
parametru, na przykład:Jednak
-i
opcja jest niestandardowym rozszerzeniem Uniksa i może nie być dostępna we wszystkich systemach operacyjnych.Możesz więc rozważyć użycie
ex
(co jest równoważne zvi -e
/vim -e
):który doda
:80
do każdego wiersza, ale czasami może dołączyć go do pustych wierszy.Lepszą metodą jest więc sprawdzenie, czy wiersz faktycznie zawiera jakąkolwiek liczbę, a następnie dopisanie go, na przykład:
Jeśli plik ma bardziej złożony format, rozważ użycie odpowiedniego wyrażenia regularnego zamiast
[0-9]
.źródło
Używając edytora tekstu, sprawdź
^M
(control-M lub powrót karetki) na końcu każdego wiersza. Najpierw musisz je usunąć, a następnie dołączyć dodatkowy tekst na końcu linii.źródło
Możesz to również osiągnąć za pomocą techniki odniesienia wstecznego
Możesz także używać z awk w ten sposób
źródło
sed -i 's / $ /, / g' foo.txt
Robię to dość często, aby dodać przecinek na końcu wyniku, więc mogę po prostu skopiować i wkleić go do tablicy Pythona (lub twojej ulubionej)
źródło