Extrai dados da linha e prefixos à linha?

1

Ok, eu tenho alguns dados no formulário:

<a href="/praha/jaktovidi/_zprava/jak-to-vidi-rektor-richard-hindls-5-cervna--1220102">
<a href="/praha/jaktovidi/_zprava/jak-to-vidi-erik-best-4-cervna--1219526">
<a href="/praha/jaktovidi/_zprava/jak-to-vidi-ivan-hoffman-3-cervna--1218826">
<a href="/praha/jaktovidi/_zprava/jak-to-vidi-pavel-kosatik-19-kvetna-verejne-chci-podekovat-statnim-zastupcum-a-policistum-kteri-se-nebali--1225675">

e gostaria de alterá-lo para:

5-cervna <a href="/praha/jaktovidi/_zprava/jak-to-vidi-rektor-richard-hindls-5-cervna--1220102">
4-cervna <a href="/praha/jaktovidi/_zprava/jak-to-vidi-erik-best-4-cervna--1219526">
3-cervna <a href="/praha/jaktovidi/_zprava/jak-to-vidi-ivan-hoffman-3-cervna--1218826">
19-kvetna <a href="/praha/jaktovidi/_zprava/jak-to-vidi-pavel-kosatik-19-kvetna-verejne-chci-podekovat-statnim-zastupcum-a-policistum-kteri-se-nebali--1225675">

ie. extrair a data do link e anexá-la ao link. Existe uma maneira legal de fazer isso com expressões regulares ou com algum script legal? O número de traços nem sempre é o mesmo e também não é "cervna" o tempo todo.

Eu cheguei ao seguinte comando grep que pega a saída apropriada, eu não sei como colá-lo junto com os dados originais:

grep -Po '[0-9]{1,2}-[[:alpha:]]*'
    
por VPeric 30.07.2013 / 16:56

4 respostas

4
$> sed -r -e 's/(.*-)([0-9]+-[a-z]+)(.*)/ /' text 
8-july <a href="arch/names-8-july--123123123">
12-february <a href="arch/seman-12-february-text-text--321321321">
17-june <a href="arch/nmaes-17-june--213213321">

Também parece ser apropriado para o seu exemplo mais recente:

$> sed -r 's/(.*-)([0-9]+-[a-z]+)(.*)/ /' text2
5-cervna <a href="/praha/jaktovidi/_zprava/jak-to-vidi-rektor-richard-hindls-5-cervna--1220102">
4-cervna <a href="/praha/jaktovidi/_zprava/jak-to-vidi-erik-best-4-cervna--1219526">
3-cervna <a href="/praha/jaktovidi/_zprava/jak-to-vidi-ivan-hoffman-3-cervna--1218826">
19-kvetna <a href="/praha/jaktovidi/_zprava/jak-to-vidi-pavel-kosatik-19-kvetna-verejne-chci-podekovat-statnim-zastupcum-a-policistum-kteri-se-nebali--1225675">
    
por 30.07.2013 / 17:18
3

Isso pressupõe que você esteja procurando a correspondência primeiro de um número, seguida por um traço e, em seguida, uma sequência de caracteres de palavras.

    perl -ne '/(\d+-\w+)/; print "$1 $_"' file.txt
    
por 30.07.2013 / 17:41
3

Solução diferente com recortar e colar (depende de haver um arquivo text existente):

cut -d"-" -f 6-7 text | paste - text

Após a edição, isso funcionaria:

grep -Po '[0-9]{1,2}-[[:alpha:]]*' text | paste - text
    
por 30.07.2013 / 17:27
3
perl -pe '$_ = "$& $_" if /[0-9]{1,2}-[[:alpha:]]*/'
    
por 30.07.2013 / 17:17

Tags