从行中提取数据并将其添加到行前?

从行中提取数据并将其添加到行前?

好的,我有一些以下形式的数据:

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

IE。从链接中提取日期并将其添加到链接前面。有没有一种好的方法可以使用正则表达式或一些不错的 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:]]*/'

相关内容