对于那些拥有一些编程知识的人来说,这应该很简单......不幸的是我没有。
我正在尝试遍历图片标题的文本文件,并将它们作为标题标签添加到html文件中。图像标题文件有105个标题(每个标题由回车符分隔),并且图库文件在每个标记上都有空白的alt标记(设置为alt =“#”)。标题的顺序与html文件中图像的顺序相对应。
换句话说......伪造的代码将是:“遍历captions.txt中的每一行以及gallery.html文件中的每个alt =”#“,将#替换为相应的标题。”< / p>
我在Mac上,所以我想使用UNIX。
非常感谢任何帮助!
谢谢, 麦克
答案 0 :(得分:4)
如果所有alt="#"
都在不同的行上,您可以使用ed:
{
while read cap
do echo "/alt=\"#\"/ s//alt=\"$cap\"/"
done < captions.txt
echo wq
} | ed gallery.html
这假设您的标题都没有包含斜杠。
答案 1 :(得分:2)
有很多方法可以实现这一目标。 awk
是经典的文本操作程序。 (好吧,awk
和sed
出于不同目的,但sed
在这里无济于事。)
awk '
BEGIN {
caps = ARGV[1]
delete ARGV[1]
}
/#/ {
getline cap < caps
gsub("#", cap)
}
{ print }
' captions.txt gallery.html
您可以将其放入脚本中以避免不止一次输入。只需使用“#!/usr/bin/awk -f
”启动纯文本文件,在其下方放置“BEGIN ... { print }
”,然后为该文件授予执行权限。
这可以简单地翻译成大多数脚本语言。的Perl:
#!/usr/bin/perl -p
BEGIN { open CAPS, shift }
if (/#/) {
chomp($cap = <CAPS>);
s/#/$cap/g;
}
Ruby中几乎相同:
#!/usr/bin/ruby
caps = IO.readlines(ARGV.shift).each {|s| s.chomp!}
while gets
$_.gsub!(/#/, caps.shift) if $_ =~ /#/
print
end
和Python:
#!/usr/bin/python
import sys
caps = [s.strip() for s in file(sys.argv[1]).readlines()]
for f in [file(s, 'r') for s in sys.argv[2:]] or [sys.stdin]:
for s in f:
if s.find('#') > 0: s = s.replace('#', caps.pop(0))
print s,