¿Cómo obtengo esto?
randomcollege-nt\user90
a esto:
user90
utilizando sed
?
sed
visita: grymoire.com/Unix/Sed.html
¿Cómo obtengo esto?
randomcollege-nt\user90
a esto:
user90
utilizando sed
?
sed
visita: grymoire.com/Unix/Sed.html
Respuestas:
Yo usaría un simple grep
para buscar user90
:
$ echo "randomcollege-nt\user90" | grep -o user90
user90
Si user90 no es constante, prefiera este comando:
$ echo "randomcollege-nt\user90" | grep -oP '(?<=randomcollege-nt\\)\w+'
user90
Finalmente usando sed
para editar el archivo en su lugar:
$ sed -ri 's/randomcollege-nt\\(user[0-9]+)/\1/' my_file
O para hacer coincidir todas las cuentas de usuario posibles:
$ sed -ri 's/randomcollege-nt\\(\w+)/\1/' my_file
grep -F
toda la cadena.
Está analizando un texto para extraer el nombre de usuario de una domain\username
cadena, muy probablemente de Windows. La mayoría de las respuestas anteriores solo abordan su cadena de ejemplo específica.
La mejor manera de hacer esto es usar regex en sed para extraer lo que venga después \
. Así es como lo harías:
sed 's|.*\\\(.*\)|\1|'
Eso coincidirá con todo ( .*
) hasta una barra diagonal inversa (aquí, estamos escapando, así que es \\
), luego coincidirá con todo después de la barra diagonal inversa ( .*
), pero lo convertirá en un grupo de captura (es decir, se colocará entre corchetes alrededor, pero también tenemos que escapar ellos, entonces \(.*\)
). Ahora que tenemos lo que viene después \
de la cadena como un grupo de captura, lo imprimimos haciendo referencia a él \1
.
Puede usar el sed
comando anterior con cualquier nombre de dominio, no necesariamente randomcollege-nt
.
$ echo "randomcollege-nt\user90" | sed 's|.*\\\(.*\)|\1|'
user90
$ echo "domain\username" | sed 's|.*\\\(.*\)|\1|'
username
$ echo "anydomainname\roboman1723" | sed 's|.*\\\(.*\)|\1|'
roboman1723
Otro sed
:
$ echo "randomcollege-nt\user90" | LC_ALL=C sed -e 's/.*\\//'
user90
o POSIXY:
$ a='randomcollege-nt\user90'
$ printf '%s\n' "${a##*\\}"
user90
sh
característica POSIX . pubs.opengroup.org/onlinepubs/009604599/utilities/…
Sé que quieres usar sed, pero yo usaría algo diferente ...
echo "randomcollege-nt\user90" | cut -d'\' -f2
¿Es esta la pregunta?
$ echo randomcollege-nt\user90| sed -e s,randomcollege-nt\,,
user90
Si el sting randomcollege-nt no está en uso, use el comando awk arriba / abajo.
/user90
nouser90
En su lugar, utiliza 'awk' para filtrar "user90":
echo "randomcollege-nt\user90" | awk -F\\ {'print $2'}
Este simple comando grep hará el trabajo,
$ echo 'randomcollege-nt\user90' | grep -oP '[^\\]*$'
user90
Con sed
eliminar todo en una cadena antes de un carácter específico (definir en doble paréntesis [Carácter específico]).
echo "randomcollege-nt\user90" | sed 's/.*[\]//'
Significa reemplazar todos los .*[\]
caracteres ( ) antes de un \
carácter con un espacio en blanco ( //
)
Si tiene un archivo y desea reemplazarlo, use el -i
indicador en sed
comando como este:
sed -i 's/.*[\]//' /path/to/FileName
Se hizo la pregunta original sed
, pero veo que las alternativas son populares aquí.
Si está utilizando Bash, la expansión de parámetros es, con mucho, la más simple:
ORIGIN='randomcollege-nt\user90'
echo "${ORIGIN#*\\}"
Si potencialmente espera más de una barra invertida, duplique los signos hash:
echo "${ORIGIN##*\\}"
Para obtener más información man bash
y buscar Parameter Expansion
.
En caso de que alguien esté tratando de eliminar un comentario # server_tokens off;
de nginx automáticamente para ayudar con las operaciones de desarrollo automático:
sudo sed -ri 's/#\s(server_tokens off;)/\1/' /etc/nginx/nginx.conf
.
Probado y funcionando para nginx / 1.12.1 en Ubuntu 16.04 LTS. Respuesta relacionada para bloquear NGINX desactivando los tokens del servidor aquí .
man the_command_name
y obtendrá un manual de instrucciones útil para el comando. También puede ir a www.google.com y escribir "tutorial de nombre de comando" y encontrará muchas guías paso a lado.