Como faço para obter isso:
randomcollege-nt\user90
para isso:
user90
usando sed?
sedvisita: grymoire.com/Unix/Sed.html
Como faço para obter isso:
randomcollege-nt\user90
para isso:
user90
usando sed?
sedvisita: grymoire.com/Unix/Sed.html
Respostas:
Eu usaria um simples greppara 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 sedpara 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 -Fa string inteira.
Você está analisando algum texto para extrair o nome de usuário de uma domain\usernamestring, 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 sedcomando 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
shrecurso 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.
/user90nã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 sedexcluir 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 -iflag flag no sedcomando 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 bashprocure 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_namee 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.