Jak mogę to uzyskać:
randomcollege-nt\user90
do tego:
user90
używasz sed
?
sed
stronie: grymoire.com/Unix/Sed.html
Jak mogę to uzyskać:
randomcollege-nt\user90
do tego:
user90
używasz sed
?
sed
stronie: grymoire.com/Unix/Sed.html
Odpowiedzi:
Użyłbym prostego grep
wyszukiwania 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 sed
do 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 -F
cały ciąg.
Analizujesz jakiś tekst, aby wyodrębnić nazwę użytkownika z domain\username
cią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 sed
polecenia 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
sh
funkcja 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.
/user90
nieuser90
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 -i
flagi w sed
poleceniu 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 bash
i 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_name
a 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.