![使用 bash/sed 重新格式化元素列表](https://linux22.com/image/203280/%E4%BD%BF%E7%94%A8%20bash%2Fsed%20%E9%87%8D%E6%96%B0%E6%A0%BC%E5%BC%8F%E5%8C%96%E5%85%83%E7%B4%A0%E5%88%97%E8%A1%A8.png)
我有一个 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 标签之间插入字段。