Есть много способов достичь этой цели. 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,