행에서 데이터를 추출하여 행 앞에 추가하시겠습니까?

행에서 데이터를 추출하여 행 앞에 추가하시겠습니까?

좋습니다. 다음 형식의 데이터가 있습니다.

<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">

나는 그것을 다음과 같이 바꾸고 싶습니다 :

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">

즉. 링크에서 날짜를 추출하여 링크 앞에 추가합니다. 정규식이나 멋진 bash 스크립트를 사용하여 이를 수행할 수 있는 좋은 방법이 있습니까? 대시의 개수는 항상 동일하지 않으며 항상 "cervna"도 아닙니다.

적절한 출력을 얻는 다음 grep 명령에 도달했지만 원시 데이터와 함께 붙여넣는 방법을 모르겠습니다.

grep -Po '[0-9]{1,2}-[[:alpha:]]*'

답변1

$> sed -r -e 's/(.*-)([0-9]+-[a-z]+)(.*)/\2 \1\2\3/' 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">

또한 최신 예제에서도 작동하는 것 같습니다.

$> sed -r 's/(.*-)([0-9]+-[a-z]+)(.*)/\2 \1\2\3/' 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">

답변2

이것은 당신이 찾고 있다고 가정합니다첫 번째숫자, 대시, 단어 문자열 순으로 일치합니다.

    perl -ne '/(\d+-\w+)/; print "$1 $_"' file.txt

답변3

잘라내기 및 붙여넣기에 대한 다양한 솔루션(기존 파일이 있는지 여부에 따라 다름 text):

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

편집 후에는 다음과 같이 작동합니다.

grep -Po '[0-9]{1,2}-[[:alpha:]]*' text | paste - text

답변4

perl -pe '$_ = "$& $_" if /[0-9]{1,2}-[[:alpha:]]*/'

관련 정보