管道命令输出到html,文件为链接(bash)

时间:2017-03-20 12:35:23

标签: html bash sed

我使用的某些命令(task-spooler)以表格格式生成文本,并将某些字段作为文件名生成

我想管道输出该命令来生成一个HTML文件,s.t。我可以在浏览器中单击文件名,它将在新的浏览器选项卡中打开。

我猜,我应该有办法检测文件名并将它们包装为<a href="file://x/y/z.txt">file://x/y/z.txt</a>。有没有一种简单的方法可以从bash命令行创建它?

3 个答案:

答案 0 :(得分:2)

您可以使用sed。这里的正则表达式非常简单,可能需要调整,具体取决于您的特定数据。

~ $ echo -e 'http://google.com/asdf says hello\nthis is another url here: https://example.com/' | \
    sed -E 's#(http[^ ]+)#<a href="\1">\1</a>#g'
<a href="http://google.com/asdf">http://google.com/asdf</a> says hello
this is another url here: <a href="https://example.com/">https://example.com/</a>
~ $ 

答案 1 :(得分:0)

最终我用管道传输了一个python脚本:

to_html.py:

#!/usr/bin/env python

"""
Convert a piped in text input to html, while replacing file/path names with URLs
"""
import sys
import os
import re

def path_to_html_link(field):
    field = field.group()
    if os.path.isfile(field) or os.path.isdir(field):
        return """<a href="file://{0}"  target="_blank">{0}  </a>""".format(field)

    else:
        return field

if __name__ == "__main__":

    while True:
        line = sys.stdin.readline()
        if not line: break  # EOF

        line = re.sub('/[^\s]*', path_to_html_link, line)
        line = '<p><tt>' + line + '</tt></p>'
        sys.stdout.write(line)

然后调用

chmod +x to_html.py
ts | to_html.py > tmp.html

答案 2 :(得分:0)

像:

#!/bin/bash

make_page() {
    echo "<html><body><ul>"
    got=
    while read -r id state file etc
    do
        [[ -f "$file" ]] && {
        printf "<li><a href="file://%s"><%s></a></li>\n" "$file" "$file";
        got=1;
        }
    done < <(sed 1d)    #skip header
    [[ -z "$got" ]] && echo '<li>No any file</li>'
    echo "</ul</body></html>"
}
[[ "$1" ]] && [[ ! -f "$1" ]] && { echo "no file $1" >&2; exit 1; }
[[ "$1" ]] && exec 3<"$1" || exec 3<&0
make_page <&3

将其保存到tspage.sh并用作tspage.sh filenametspage.sh < filename