Я не очень хорошо знаком с синтаксисом массива Bash, поэтому может быть более лаконичный способ передать массив в качестве аргумента,но для начала будет достаточно следующего:
# ~/.tmuxinator/iterate.yml
name: iterate
root: ~/
windows:
- one:
panes:
<%- args.each do |arg| %>
- echo <%= arg %>
<%- end %>
arr=(Hello World)
tmuxinator start iterate ${arr[*]}
Вы можете использовать
sed 's/.\{30\}/&213 /' InFile > OutFile
для замены первых 30 символов ("любой символ" умножить на 30 )сами по себе(&
)плюс "213".
Вы можете использовать счетное RE. Например, x{12}
соответствует 12 x
символам, а y{1,3}
соответствует 1, 2 или 3 y
символам. Здесь мы собираемся использовать .{30}
для сопоставления 30 подстановочных знаков (, то есть 30 любых символов ). \1
в строке результата соответствует ссылке в квадратных скобках в сопоставлении с образцом
sed -r 's#^(.{30})#\1213 #' file
В своем обновленном вопросе вы теперь говорите, что перед вставкой есть 878 символов. Так что просто измените 30 в примере на 878 и вставьтеXXX
sed -r 's#^(.{878})#\1XXX#' file
Тот же процесс может применяться для любой модификации фиксированной -ширины.
Вы также можете использовать perl
, который не имеет ограничений на длину строки, характерных для некоторых реализаций sed
,
perl -pe 's#^(.{878})#$1XXX#' file
с использованием Раку (урожденная Perl6)
$ raku -pe 's/ (^^. ** 30) /{$0}213-/ ;'
ИЛИ
$ raku -pe 's/ (^^. ** 30) /{$0}{"213-"}/ ;'
Приведенный выше код использует оператор Raku s///
. Флаг командной строки -pe (s )указывает Raku обрабатывать строку ввода -по строке -и автоматически печатать возвращаемое значение.
Примечание. :Раку обычно очень терпимо относится к пробелам в регулярных выражениях, но замещающая половина оператора s///
— одно из тех мест, где стоит быть особенно осторожным. Простое использование $0 213-
добавит дополнительный пробел перед строкой из четырех -символов 213-
, которую вы хотели бы вставить сразу после первого поля из 30 -символов.
Решение состоит в том,:
$0
в фигурные скобки, указав {$0}213-
в качестве замены, или $0
и двойное -цитируемое 213-
в фигурные скобки, не оставляя пробелов между ними, например:{$0}{"213-"}
. [Примечание: для всех приведенных выше примеров я использовал "213 -" (с завершающим дефисом )в качестве примера строки вставки; Я понимаю, что ОП действительно хочет ""213" (с пробелом в конце )в качестве правильной строки вставки].
Если вы выходите за пределы возможностей инструмента, вы можете использовать альтернативный вариант: разбить число 877 на 3 единицы по 255 и оставшиеся 112.
skip=877
cmax=255
mult=`expr "$skip" / "$cmax"`
rem=`expr "$skip" % "$cmax"`
lim=".\\{$cmax\\}"
re="\\($lim\\)\\{$mult\\}.\\{$rem\\}"
sed -e "s/$re/&XXX/" your_file_nam
Гораздо проще использоватьPerl
:
perl -lpe 'substr($_, 877) =~ s/^/XXX/' your_file_name
питон:
python3 -c '
import sys
f, p, r = sys.argv[1:]
p = int(p)
with open(f) as fh:
print(*[l[:p]+r+l[p:] for l in fh],sep="",end="")
' file_name 877 "XXX"