#!/usr/bin/perl
use File::Slurp;
# read d.txt and turn into a regular expression.
my $re = '^('. join ('|',read_file('./d.txt', chomp => 1)). ')$';
# read input files and print location of matches.
while (<>) {
for (my $i=0;$i <= length; $i++) {
printf "%s\n", $i+1 if (substr($_,$i,1) =~ m/$re/o);
}
}
Этот perl-скрипт печатает позиции каждого `символа D' и 'O' во входных строках.
Сохранить как, например. islem.pl
, сделайте его исполняемым с помощью chmod +x islem.pl
и запустите его так:
$./islem.pl nohd*.txt
12
22
24
35
10
11
12
13
14
15
16
17
18
19
20
21
22
Приведенный выше вывод получен при сохранении данных сэмпла как nohd1.txt
.
Кажется, я неправильно понял ваш вопрос. Похоже, вам нужно количество совпадений в строке, а не позиция каждого совпадения. Если это то, что вы хотели, попробуйте вместо этого:
#!/usr/bin/perl -l
use File::Slurp;
# read d.txt and turn into a regular expression.
my $re = '^('. join ('|',read_file('./d.txt', chomp => 1)). ')$';
# read input files and print location of matches.
while (<>) {
my $count=0;
for (my $i=0;$i <= length; $i++) {
$count++ if (substr($_,$i,1) =~ m/$re/o);
};
print $count;
}
Пример вывода:
$./islem2.pl nohd*
4
13
Это легко адаптируется ко многим вариациям. Например, если вы хотите напечатать имя файла и номер строки вместе с соответствующим счетчиком в формате :
с разделителями:
#!/usr/bin/perl -l
use File::Slurp;
# read d.txt and turn into a regular expression.
my $re = '^('. join ('|',read_file('./d.txt', chomp => 1)). ')$';
# read input files and print location of matches.
while (<>) {
my $count=0;
for (my $i=0;$i <= length; $i++) {
$count++ if (substr($_,$i,1) =~ m/$re/o);
};
print "$ARGV:$.:$count";
} continue {
# explicitly close the current file on eof to reset the line counter
# after each input file because perl only has a cumulative line
# counter ($.) rather than both FR and FNR like awk.
close ARGV if eof;
}
Пример вывода:
$./islem3.pl nohd*.txt
nohd1.txt:1:4
nohd1.txt:2:13
Я ничего не могу сказать о спецификации, но поскольку важен только результат, я (не знаком с цитированием в таких файлах, хотя )ожидаю, что это сработает:
Exec=bash -c 'echo seamonkey openURL"($1)"' seamonkey-wrapper %u%
Использование шаблона переменных с начальными и конечными процентными символами кажется мне -очень похожим на DOS, в документе спецификации freedesktop references упоминаются только начальные символы.
Согласно документации опции Mozilla Remote Control , команда openURL
является аргументом опции -remote
. Запуск командной строки Exec из оболочки не работает без этой опции. Успешно протестировано с seamonkey 2.49.5 на Fedora.
Не хотите попробовать Exec=seamonkey -remote openURL(%u)
?
Недавно у меня была эта проблема, и есть спецификация. здесь
Если %
для приложения, нужно поставить %%
. Это на будущее, при создании файла.desktop для youtube -dl и использовании опции --output
. В вашем случае вам, вероятно, нужно избежать фигурных скобок. \(\)
, потому что их оценивает оболочка. Установите опцию terminal=true
, вы увидите сообщение об ошибке (
.
Или попробуйте :seamonkey 'openURL(%u)'
seamonkey "openurl\$'0028'%u\$'0029'"
Осторожно! Раньше у меня были проблемы с '
, а "
работает. Но только '
означает буквальное без какой-либо интерпретации/расширения. IIRC, вам не нужно помещать переменную в кавычки, так как она уже будет заключена в кавычки.