Remove a primeira parte de uma string usando sed

14

Como faço para isso:

randomcollege-nt\user90

para isso:

user90

usando sed ?

    
por Roboman1723 04.09.2014 / 16:52

10 respostas

14

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, usando sed para editar o arquivo:

$ sed -ri 's/randomcollege-nt\(user[0-9]+)//' my_file

Ou para corresponder a todas as contas de usuário possíveis:

$ sed -ri 's/randomcollege-nt\(\w+)//' my_file
    
por Sylvain Pineau 04.09.2014 / 17:09
18

Você está analisando algum texto para extrair o nome de usuário de uma string domain\username , provavelmente do Windows. A maioria das respostas acima está apenas endereçando sua string de exemplo específica.

A melhor maneira de fazer isso é usando o regex in sed para extrair o que vem depois de \ . Veja como você faria isso:

sed 's|.*\\(.*\)||'

Isso corresponderá a tudo ( .* ) até uma barra invertida (aqui, estamos escapando, por isso é \ ), depois corresponderá tudo após a barra invertida ( .* ), mas tornando-o um grupo de captura ou seja, coloque os suportes ao redor, mas também temos que escapar deles, então \(.*\) ). Agora que temos o que vem depois do \ na string como um grupo de captura, nós o imprimimos referenciando-o com .

Você pode usar o comando sed acima com qualquer nome de domínio, não necessariamente randomcollege-nt .

$ echo "randomcollege-nt\user90" | sed 's|.*\\(.*\)||'
user90

$ echo "domain\username" | sed 's|.*\\(.*\)||'
username

$ echo "anydomainname\roboman1723" | sed 's|.*\\(.*\)||'
roboman1723
    
por Alaa Ali 04.09.2014 / 17:57
10

Outro sed :

$ echo "randomcollege-nt\user90" | LC_ALL=C sed -e 's/.*\//'
user90

ou POSIXly:

$ a='randomcollege-nt\user90'
$ printf '%s\n' "${a##*\}"
user90
    
por cuonglm 05.09.2014 / 06:04
7

Eu sei que você quer usar sed, mas eu usaria algo diferente ...

echo "randomcollege-nt\user90" | cut -d'\' -f2
    
por kervin 04.09.2014 / 17:50
5

Esta é 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.

    
por Archemar 04.09.2014 / 16:58
3

Em vez disso, use 'awk' para filtrar "user90":

echo "randomcollege-nt\user90" | awk -F\ {'print '}
    
por saptarshi nag 04.09.2014 / 16:58
1

Este comando simples do grep fará o trabalho,

$ echo 'randomcollege-nt\user90' | grep -oP '[^\]*$'
user90
    
por Avinash Raj 05.09.2014 / 13:59
1


Com sed exclua tudo em uma string antes de um caractere específico (defina em colchete duplo [Specific char]).

echo "randomcollege-nt\user90" | sed 's/.*[\]//'

Significa substituir todos os caracteres ( .*[\] ) antes de um caractere \ com caractere de espaço em branco ( // )

Se você tiver um arquivo e quiser substituir, use -i flag no comando sed desta forma:

sed -i 's/.*[\]//' /path/to/FileName
    
por αғsнιη 06.09.2014 / 11:35
1

A pergunta original pediu sed , mas vejo que as alternativas são populares aqui.

Se você estiver usando o Bash, a expansão de parâmetro é de longe a mais simples:

ORIGIN='randomcollege-nt\user90'
echo "${ORIGIN#*\}"

Se você estiver esperando potencialmente mais de uma barra invertida, dobre os sinais de hash:

echo "${ORIGIN##*\}"

Para mais informações, man bash e pesquise Parameter Expansion .

    
por Paddy Landau 09.09.2014 / 14:53
0

Caso alguém esteja tentando remover automaticamente um comentário com # server_tokens off; do nginx para ajudar com os devoluções automáticas:

sudo sed -ri 's/#\s(server_tokens off;)//' /etc/nginx/nginx.conf .

Testado e trabalhando para o nginx / 1.12.1 no Ubuntu 16.04 LTS. Resposta relacionada ao bloqueio do NGINX desativando os tokens do servidor aqui .

    
por jamescampbell 29.10.2017 / 22:31