Apaga tudo antes de “/” em cada linha

2

Estou tentando excluir determinado texto que aparece antes de / em todas as linhas.

Eu tenho algo como:

testing.db.com/7fad416d-f2b3-4259-b98d-2449957a3123
testing.db.com/8a8589bf-49e3-4cd7-af15-6753067355c6

e eu só quero acabar com:

7fad416d-f2b3-4259-b98d-2449957a3123
8a8589bf-49e3-4cd7-af15-6753067355c6 

Alguém pode me ajudar com uma expressão regular? Tudo o que encontrei é excluir após / , não antes .

    
por user3738022 01.07.2015 / 20:11

4 respostas

4

Usando cut :

$ cut -sd'/' -f2 file.txt   ##This will print only the lines containing /
7fad416d-f2b3-4259-b98d-2449957a3123
8a8589bf-49e3-4cd7-af15-6753067355c6

As sugestões a seguir presumem que / aparece apenas uma vez em uma linha:

Usando grep :

$ grep -o '[^/]*$' file.txt  ##This will print the lines not having / too
7fad416d-f2b3-4259-b98d-2449957a3123
8a8589bf-49e3-4cd7-af15-6753067355c6

Se você tem / em todas as linhas, pode usá-las também:

Usando a expansão do parâmetro bash :

$ while read line; do echo "${line#*/}"; done <file.txt 
7fad416d-f2b3-4259-b98d-2449957a3123
8a8589bf-49e3-4cd7-af15-6753067355c6

Ou python :

#!/usr/bin/env python2
with open('file.txt') as f:
    for line in f:
        print line.split('/')[1].rstrip()

Observe que, no que diz respeito ao seu exemplo, todas as sugestões acima são válidas.

    
por 01.07.2015 / 22:07
2

bastante fácil com o sed:

echo "testing.db.com/7fad416d-f2b3-4259-b98d-2449957a3123" | sed -e "s/.*\///"

a sintaxe básica é "s / search / replace /" e aqui procuramos por .*\/ , o que significa tudo que termina com slash (escape) e substituímos por nada.

    
por 01.07.2015 / 20:18
0

Usando o Perl:

< file.txt perl -pe 's/.*\///'
    
por 01.07.2015 / 22:15
-1

Dois métodos usando sed:

sed -i "s|testing.db.com/||g" file_path_here

ou

echo "testing.db.com/7fad416d-f2b3-4259-b98d-2449957a3123" | sed -e "s|testing.db.com/||g"
    
por 01.07.2015 / 22:24