Jak mogę to uzyskać:
randomcollege-nt\user90
do tego:
user90
używasz sed?
sedstronie: grymoire.com/Unix/Sed.html
Jak mogę to uzyskać:
randomcollege-nt\user90
do tego:
user90
używasz sed?
sedstronie: grymoire.com/Unix/Sed.html
Odpowiedzi:
Użyłbym prostego grepwyszukiwania user90:
$ echo "randomcollege-nt\user90" | grep -o user90
user90
Jeśli użytkownik90 nie jest stały, preferuj to polecenie:
$ echo "randomcollege-nt\user90" | grep -oP '(?<=randomcollege-nt\\)\w+'
user90
Na koniec użyj seddo edycji pliku w miejscu:
$ sed -ri 's/randomcollege-nt\\(user[0-9]+)/\1/' my_file
Lub, aby dopasować wszystkie możliwe konta użytkowników:
$ sed -ri 's/randomcollege-nt\\(\w+)/\1/' my_file
grep -Fcały ciąg.
Analizujesz jakiś tekst, aby wyodrębnić nazwę użytkownika z domain\usernameciągu, najprawdopodobniej z systemu Windows. Większość powyższych odpowiedzi dotyczy tylko określonego ciągu przykładowego.
Najlepszym sposobem na to jest użycie wyrażenia regularnego w sed, aby wyodrębnić to, co nastąpi później \. Oto jak to zrobiłbyś:
sed 's|.*\\\(.*\)|\1|'
To dopasuje wszystko ( .*) do ukośnika odwrotnego (tutaj uciekamy, więc to jest \\), a następnie dopasuje wszystko po ukośniku ( .*), ale czyni z niego grupę przechwytywania (tzn. Zawijaj nawiasy wokół niego, ale musimy również uciec im, więc \(.*\)). Teraz, gdy mamy coś, co następuje po \ciągu jako grupa przechwytywania, drukujemy to, odwołując się do niego \1.
Powyższego sedpolecenia można użyć z dowolną nazwą domeny, niekoniecznie randomcollege-nt.
$ echo "randomcollege-nt\user90" | sed 's|.*\\\(.*\)|\1|'
user90
$ echo "domain\username" | sed 's|.*\\\(.*\)|\1|'
username
$ echo "anydomainname\roboman1723" | sed 's|.*\\\(.*\)|\1|'
roboman1723
Kolejny sed:
$ echo "randomcollege-nt\user90" | LC_ALL=C sed -e 's/.*\\//'
user90
lub POSIXly:
$ a='randomcollege-nt\user90'
$ printf '%s\n' "${a##*\\}"
user90
shfunkcja POSIX . pubs.opengroup.org/onlinepubs/009604599/utilities/…
Wiem, że chcesz użyć sed, ale użyłbym czegoś innego ...
echo "randomcollege-nt\user90" | cut -d'\' -f2
Czy to jest pytanie?
$ echo randomcollege-nt\user90| sed -e s,randomcollege-nt\,,
user90
jeśli żądło randomcollege-nt nie jest stałe, użyj komendy awk powyżej / poniżej.
/user90nieuser90
Zamiast tego używasz „awk” do filtrowania „user90”:
echo "randomcollege-nt\user90" | awk -F\\ {'print $2'}
To proste polecenie grep wykona zadanie,
$ echo 'randomcollege-nt\user90' | grep -oP '[^\\]*$'
user90
Z sed usunąć wszystko na sznurku przed określonym znaku (określić na podwójnym uchwycie [specyficzna char]).
echo "randomcollege-nt\user90" | sed 's/.*[\]//'
Oznacza zastąpienie wszystkich ( .*[\]) znaków przed a\ znak spacji ( //)
Jeśli masz plik i chcesz go zastąpić, użyj -iflagi w sedpoleceniu w następujący sposób:
sed -i 's/.*[\]//' /path/to/FileName
Zadano oryginalne pytanie sed , ale widzę, że tutaj są popularne alternatywy.
Jeśli używasz Bash, ekspansja parametrów jest zdecydowanie najprostsza:
ORIGIN='randomcollege-nt\user90'
echo "${ORIGIN#*\\}"
Jeśli potencjalnie oczekujesz więcej niż jednego ukośnika odwrotnego, podwój znaki skrótu:
echo "${ORIGIN##*\\}"
Aby uzyskać więcej informacji man bashi wyszukaj Parameter Expansion.
W przypadku, gdy ktoś próbuje automatycznie usunąć komentarz # server_tokens off;z nginx, aby pomóc w auto dev-ops:
sudo sed -ri 's/#\s(server_tokens off;)/\1/' /etc/nginx/nginx.conf.
Przetestowane i działające dla nginx / 1.12.1 na Ubuntu 16.04 LTS. Powiązana odpowiedź na zablokowanie NGINX przez wyłączenie tokenów serwera tutaj .
man the_command_namea otrzymasz pomocną instrukcję obsługi polecenia. Możesz także przejść na stronę www.google.com i wpisać „samouczek nazwy polecenia”, a znajdziesz wiele szczegółowych instrukcji.