使用 bash/sed 重新格式化元素列表

使用 bash/sed 重新格式化元素列表

我有一个 CSV 文件,其中包含如下列表:

URL,Domain,anchor
https://example1.com,Example1,Category1

我需要将其重新格式化为 HTML,如下所示:

<li><a href="https://example1.com" title="Category1"> Example1 </a></li>

我已经摆弄 sed 和 awk 一段时间了,但没有成功。到目前为止,我最好的办法是先插入第一根弦https,然后从那里手动工作。所以我想知道是否有更好更快的方法来做到这一点。

答案1

我在测试文件中添加了一行额外的行,名为eg.csv

URL,Domain,anchor
https://example1.com,Example1,Category1
https://unix.stackexchange.com/questions/693322/reformatting-a-list-of-elements-using-bash-sed,This question,Here

然后编写了这个基本的 AWK 脚本:

#!/bin/bash
awk -F "," '
 NR == 1 { next } # Ignore titles
  {
     printf( "<li><a href=\"%s\" title=\"%s\"> %s </a></li>\n",
       $1, $3, $2 )
  }
' <eg.csv

结果是:

$ ./fmt
<li><a href="https://example1.com" title="Category1"> Example1 </a></li>
<li><a href="https://unix.stackexchange.com/questions/693322/reformatting-a-list-of-elements-using-bash-sed" title="Here"> This question </a></li>

我希望能满足您的需求。

答案2

sed

sed '1d;s@\(^[^,]*\),\([^,]*\),\(.*\)@<li><a href="\1" title="\3"> \2 </a></li>@' test

删除标题行 ( 1d),然后在每个逗号处分割每一行以获取字段。

在获得的 html 标签之间插入字段。

相关内容