Como incluir tudo antes do Colon em Sed / Grep /…?

0

Código

sed -n 's/.*tex:/[preventColonFromResult]/p' ./BitTorrentSync/Gyn/1.12.2015.tex:  Agents in young <40yr?

onde

    A entrada
  • é ./BitTorrentSync/Gyn/1.12.2015.tex: Agents in young <40yr? .
  • A saída esperada
  • é ./BitTorrentSync/Gyn/1.12.2015.tex .

Acho que -n não faz sentido porque quero passar a saída para less . Eu pesquiso a correspondência .*tex: , mas ela não deve incluir : no resultado. Eu mantenho p no final para não fazer a substituição.

Saída de DonCristi para grep

Tentando dividir os dois pontos : com grep sem a semente de sed / grep / ... Código no GNU Grep 2.23

find . -name "*.tex" -exec ggrep -i -oP '^[^:]*(?=:)' {} \; | less

Saída malsucedida com saída como conteúdo de arquivos, não nomes de arquivos. Este comando, na verdade, inclui apenas o conteúdo dos arquivos e sai fora dos nomes dos arquivos.

Como você pode obter tudo antes dos dois pontos : em SED / Grep /...?

    
por Léo Léopold Hertz 준영 19.04.2016 / 10:58

5 respostas

2

Se você tivesse tempo e lesse o manual grep , teria encontrado a opção l

-l, --files-with-matches
       Suppress normal output; instead print the name of each input file from which  output would normally
       have been printed. The scanning will stop on the first match.

Seu comando find seria parecido com

find . -name "*.tex" -exec grep -il "agent" {} \; | less

ou mais rápido

find . -name "*.tex" -exec grep -il "agent" {} + | less
    
por 20.04.2016 / 20:25
5
  1. sed opera em stdin, não em seus argumentos , a menos que você forneça nomes de arquivo.
  2. É mais fácil especificar o que você deseja remover do que deseja manter, com sed .

Em vez de

sed -n 's/.*tex:/[preventColonFromResult]/p' ./BitTorrentSync/Gyn/1.12.2015.tex:  Agents in young <40yr?

talvez você quisesse dizer

printf '%s\n' './BitTorrentSync/Gyn/1.12.2015.tex:  Agents in young <40yr?' | sed 's/:.*//'

Mas, para este caso de uso específico, você pode usar apenas uma ferramenta de finalidade única, ou seja, cut :

printf '%s\n' './BitTorrentSync/Gyn/1.12.2015.tex:  Agents in young <40yr?' | cut -d: -f1
    
por 19.04.2016 / 11:04
2

Se você estiver configurado para fazer isso em sed e corresponder no tex: em vez de apenas em : , também poderá tentar:

echo "./BitTorrentSync/Gyn/1.12.2015.tex:  Agents in young <40yr?" | sed 's/\(^.*tex\):.*//'
    
por 19.04.2016 / 15:31
1
echo "bla-bla-bla:ololo-testo" |sed 's/:.*$//'  
bla-bla-bla
    
por 19.04.2016 / 11:02
0
$ abc="./BitTorrentSync/Gyn/1.12.2015.tex:  Agents in young <40yr?"
$ pqr=$(echo "$abc" | sed -e 's/:.*//')
$ echo $pqr
./BitTorrentSync/Gyn/1.12.2015.tex

Isso funciona para mim.

    
por 19.04.2016 / 11:15

Tags