Como faço para obter isso:
randomcollege-nt\user90
para isso:
user90
usando sed
?
sed
visita: grymoire.com/Unix/Sed.html
Como faço para obter isso:
randomcollege-nt\user90
para isso:
user90
usando sed
?
sed
visita: grymoire.com/Unix/Sed.html
Respostas:
Eu usaria um simples grep
para procurar user90
:
$ echo "randomcollege-nt\user90" | grep -o user90
user90
Se user90 não for constante, prefira este comando:
$ echo "randomcollege-nt\user90" | grep -oP '(?<=randomcollege-nt\\)\w+'
user90
Finalmente, use sed
para editar o arquivo no local:
$ sed -ri 's/randomcollege-nt\\(user[0-9]+)/\1/' my_file
Ou para corresponder a todas as contas de usuário possíveis:
$ sed -ri 's/randomcollege-nt\\(\w+)/\1/' my_file
grep -F
a string inteira.
Você está analisando algum texto para extrair o nome de usuário de uma domain\username
string, provavelmente do Windows. A maioria das respostas acima trata apenas da sua sequência de exemplo específica.
A melhor maneira de fazer isso é usar o regex no sed para extrair o que vier depois \
. Aqui está como você faria isso:
sed 's|.*\\\(.*\)|\1|'
Isso corresponderá a tudo ( .*
) até uma barra invertida (aqui, estamos escapando, por isso é \\
), depois corresponderá a tudo após a barra invertida ( .*
), mas transformando-o em um grupo de captura (ou seja, entre colchetes, mas também precisaremos escapar) eles, então \(.*\)
). Agora que temos o que vem depois da \
string como um grupo de captura, imprimimos fazendo referência a ele \1
.
Você pode usar o sed
comando acima com qualquer nome de domínio, não 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
Outro sed
:
$ echo "randomcollege-nt\user90" | LC_ALL=C sed -e 's/.*\\//'
user90
ou POSIXly:
$ a='randomcollege-nt\user90'
$ printf '%s\n' "${a##*\\}"
user90
sh
recurso POSIX . pubs.opengroup.org/onlinepubs/009604599/utilities/...
Eu sei que você quer usar o sed, mas eu usaria algo diferente ...
echo "randomcollege-nt\user90" | cut -d'\' -f2
Essa é a pergunta?
$ echo randomcollege-nt\user90| sed -e s,randomcollege-nt\,,
user90
se o sting randomcollege-nt não for contant, use o comando awk acima / abaixo.
/user90
nãouser90
Em vez disso, você usa 'awk' para filtrar "user90":
echo "randomcollege-nt\user90" | awk -F\\ {'print $2'}
Este comando grep simples fará o trabalho,
$ echo 'randomcollege-nt\user90' | grep -oP '[^\\]*$'
user90
Com sed
excluir tudo em uma sequência antes de um caractere específico (defina entre colchetes [Caractere específico]).
echo "randomcollege-nt\user90" | sed 's/.*[\]//'
Significa substituir todos os .*[\]
caracteres ( ) antes de um \
caractere por caracteres de espaço em branco ( //
)
Se você possui um arquivo e deseja substituir, use -i
flag flag no sed
comando como este:
sed -i 's/.*[\]//' /path/to/FileName
A pergunta original foi solicitada sed
, mas vejo que as alternativas são populares aqui.
Se você estiver usando o Bash, a expansão de parâmetros é de longe a mais simples:
ORIGIN='randomcollege-nt\user90'
echo "${ORIGIN#*\\}"
Se você está potencialmente esperando mais de uma barra invertida, duplique os sinais de hash:
echo "${ORIGIN##*\\}"
Para mais informações, man bash
procure Parameter Expansion
.
Caso alguém esteja tentando remover um comentário # server_tokens off;
do nginx automaticamente para ajudar nas dev-ops automáticas:
sudo sed -ri 's/#\s(server_tokens off;)/\1/' /etc/nginx/nginx.conf
.
Testado e funcionando para o nginx / 1.12.1 no Ubuntu 16.04 LTS. Resposta relacionada ao bloqueio do NGINX desativando os tokens do servidor aqui .
man the_command_name
e você receberá um manual de instruções útil para o comando. Você também pode ir para www.google.com e digitar "command_name tutorial" e encontrará vários guias passo a passo.