Come ottengo da questo:
randomcollege-nt\user90
a questo:
user90
usando sed
?
sed
visita: grymoire.com/Unix/Sed.html
Come ottengo da questo:
randomcollege-nt\user90
a questo:
user90
usando sed
?
sed
visita: grymoire.com/Unix/Sed.html
Risposte:
Userei un semplice grep
da cercare user90
:
$ echo "randomcollege-nt\user90" | grep -o user90
user90
Se user90 non è costante, preferisci questo comando:
$ echo "randomcollege-nt\user90" | grep -oP '(?<=randomcollege-nt\\)\w+'
user90
Infine usando sed
per modificare il file in atto:
$ sed -ri 's/randomcollege-nt\\(user[0-9]+)/\1/' my_file
O per abbinare tutti i possibili account utente:
$ sed -ri 's/randomcollege-nt\\(\w+)/\1/' my_file
grep -F
l'intera stringa.
Stai analizzando del testo per estrarre il nome utente da una domain\username
stringa, molto probabilmente da Windows. La maggior parte delle risposte precedenti riguarda solo la stringa di esempio specifica.
Il modo migliore per farlo è usare regex in sed per estrarre tutto ciò che viene dopo \
. Ecco come lo faresti:
sed 's|.*\\\(.*\)|\1|'
Che corrisponderà a tutto ( .*
) fino a una barra rovesciata (qui, stiamo sfuggendo, quindi è \\
), quindi abbina tutto dopo la barra rovesciata ( .*
), ma rendendolo un gruppo di acquisizione (ovvero avvolgendolo tra parentesi, ma dobbiamo anche scappare loro, quindi \(.*\)
). Ora che abbiamo tutto ciò che segue \
la stringa come gruppo di acquisizione, lo stampiamo facendo riferimento a \1
.
È possibile utilizzare il sed
comando sopra con qualsiasi nome di dominio, non necessariamente randomcollege-nt
.
$ echo "randomcollege-nt\user90" | sed 's|.*\\\(.*\)|\1|'
user90
$ echo "domain\username" | sed 's|.*\\\(.*\)|\1|'
username
$ echo "anydomainname\roboman1723" | sed 's|.*\\\(.*\)|\1|'
roboman1723
Un altro sed
:
$ echo "randomcollege-nt\user90" | LC_ALL=C sed -e 's/.*\\//'
user90
o POSIXly:
$ a='randomcollege-nt\user90'
$ printf '%s\n' "${a##*\\}"
user90
sh
funzione POSIX . pubs.opengroup.org/onlinepubs/009604599/utilities/…
So che vuoi usare sed, ma userei qualcosa di diverso ...
echo "randomcollege-nt\user90" | cut -d'\' -f2
È questa la domanda?
$ echo randomcollege-nt\user90| sed -e s,randomcollege-nt\,,
user90
se la puntura randomcollege-nt non è contante utilizzare il comando awk sopra / sotto.
/user90
nonuser90
Piuttosto usi 'awk' per filtrare "user90":
echo "randomcollege-nt\user90" | awk -F\\ {'print $2'}
Questo semplice comando grep farà il lavoro,
$ echo 'randomcollege-nt\user90' | grep -oP '[^\\]*$'
user90
Con sed
tutto ciò che di eliminazione in una stringa prima di un carattere specifico (definire in doppia staffa [char Specific]).
echo "randomcollege-nt\user90" | sed 's/.*[\]//'
I mezzi sostituiscono tutti i .*[\]
caratteri ( ) prima di un \
carattere con carattere spazi bianchi ( //
)
Se hai un file e vuoi sostituirlo, usa usa -i
flag in sed
questo modo:
sed -i 's/.*[\]//' /path/to/FileName
La domanda originale è stata posta sed
, ma vedo che le alternative sono popolari qui.
Se stai usando Bash, l'espansione dei parametri è di gran lunga la più semplice:
ORIGIN='randomcollege-nt\user90'
echo "${ORIGIN#*\\}"
Se ti aspetti potenzialmente più di una barra rovesciata, raddoppia i segni di hash:
echo "${ORIGIN##*\\}"
Per ulteriori informazioni man bash
e cercare Parameter Expansion
.
Nel caso in cui qualcuno stia cercando di rimuovere automaticamente un commento # server_tokens off;
da nginx per aiutare con le auto-dev-op:
sudo sed -ri 's/#\s(server_tokens off;)/\1/' /etc/nginx/nginx.conf
.
Testato e funzionante per nginx / 1.12.1 su Ubuntu 16.04 LTS. Risposta correlata al blocco di NGINX disattivando i token del server qui .
man the_command_name
e otterrai un utile manuale di istruzioni per il comando. Puoi anche visitare il sito www.google.com e digitare "tutorial nome comando" e troverai molte guide dettagliate.