Похоже, что без кавычек получается нужный результат:
touch "foo bar"
rm (echo foo bar)
Тест:
echo "foo bar" > foo
touch "foo bar"
rm (cat foo)
Команда требует GNU sed
и, по-видимому, вставляет строку Dcom.sun.management.jmxremote.ssl=false
с последующей новой строкой перед первым вхождением -jar
в конце строки.
Пример:
something
something
something-jar
something
превращается в
something
something
somethingDcom.sun.management.jmxremote.ssl=false
-jar
something
Команда sed
считывает весь файл в память, выполняя H
для каждой строки файла. (Добавляет текущую строку в «резервное пространство» с символом новой строки в начале ). Когда он достигает последней строки ($
), он меняет место хранения на пространство шаблона(x
)и удаляет первую новую строку (, помещенную там, запуская H
для первой строки файла ). Затем он заменяет -jar\n
на Dcom.sun.management.jmxremote.ssl=false\n-jar\n
(, где &
соответствует выражению ). Затем он печатает собранные строки (p
).
Другой способ сделать то же самое сawk
:
awk 'skip==0 && sub("-jar$", "Dcom.sun.management.jmxremote.ssl=false\n-jar") { skip=1 } { print }' "$File"
Это пытается сделать одну и ту же замену в каждой строке, и когда это удается, он устанавливает skip=1
, что заставит его не пытаться снова. Каждая строка печатается независимо от того, произошла замена или нет.
Это не сохраняет весь файл в памяти.