sed :как добавить текст к первым x вхождениям

Это автономная -Java-программа, основанная на нескольких «трюках»:

  • Java-программы могут быть упакованы в виде файлов JAR, которые представляют собой ZIP-файлы, содержащие манифест (META-INF/MANIFEST.MF), указывающий запускаемый класс Java;
  • java -jar, учитывая файл JAR, просмотрит манифест и запустит соответствующий класс, загрузив любые другие необходимые ресурсы из файла JAR и среды выполнения Java (можно также указать другой класс для запуска, но здесь это не имеет значения );
  • ZIP-файлы могут начинаться с произвольных данных; так работают самораспаковывающиеся -исполняемые файлы (исполняемые ZIP-файлы, которые будут распаковываться при запуске ).

Итак, svg2png— это файл JAR, но с предваряемым сценарием оболочки:

#!/bin/sh

exec java -Xmx1G -jar "$0" "$@"

При запуске будет запущена оболочка, которая затем заменит себя на java -Xmx1G -jarи имя «сценария»(svg2pngс любым использованным путем )и любыми аргументами. -Xmx1Gустанавливает размер кучи, а -jarуказывает JVM «запустить» данный файл JAR, в данном случае svg2png. Остальная часть svg2png— это файл JAR; в частности, он содержит следующий манифест:

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: sterlp
X-Compile-Target-JDK: 1.8
X-Compile-Source-JDK: 1.8
Created-By: Apache Maven 3.3.3
Build-Jdk: 1.8.0_51
Main-Class: org.sterl.svg2png.Main

Это указывает JVM запустить класс org.sterl.svg2png.Main, который запускает программу.

Вы найдете более подробную информацию о формате ZIP в Википедии , в частности описание структуры, которое показывает, как формат допускает произвольные данные в начале файла (и в других позициях ). ZIP-файлы идентифицируются по их «центральному каталогу», который находится в конце файла.

2
22.10.2021, 21:54
1 ответ

С помощью perlмы могли бы сделать так, как показано

perl -lpe '
  $_ = $k == 3 ? next : s/This is a test(?{$k++}).*\K/./r;
' file

Слоны тоже умеют танцевать, хотя и простые па. Используя GNU sedзапись в расширенном режиме регулярных выражений -E, мы можем сохранить счетчик как количество новых строк в удержании.

K=3
sed -Ee '
  /This is a test/!b
  G
  /(.*\n){'"$K"'}.*\n/!{
    s/\n+/./p;z;H;d
  }
  s/\n+//
  :a;n;ba
' file
0
23.10.2021, 12:37

Теги

Похожие вопросы