Sed / RegEx - понимание оператора

Похоже, что без кавычек получается нужный результат:

touch "foo bar"
rm (echo foo bar)

Тест:

echo "foo bar" > foo
touch "foo bar"
rm (cat foo)
0
20.11.2018, 22:42
1 ответ

Команда требует 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, что заставит его не пытаться снова. Каждая строка печатается независимо от того, произошла замена или нет.

Это не сохраняет весь файл в памяти.

0
28.01.2020, 04:26

Теги

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