我使用的某些命令(task-spooler)以表格格式生成文本,并将某些字段作为文件名生成
我想管道输出该命令来生成一个HTML文件,s.t。我可以在浏览器中单击文件名,它将在新的浏览器选项卡中打开。
我猜,我应该有办法检测文件名并将它们包装为<a href="file://x/y/z.txt">file://x/y/z.txt</a>
。有没有一种简单的方法可以从bash命令行创建它?
答案 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 filename
或tspage.sh < filename