いいですね。次の形式のデータがあります。
<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:]]*/'