Убедитесь, что версия JVM (32/64 бит), которую вы используете, соответствует версии eclipse (32/64 бит).
Я считаю эти строки противоречивыми.
64-разрядная серверная виртуальная машина Java HotSpot ™ (сборка 23.25-b01, смешанный режим)
arch x86
Как вы говорите, если у вас есть данные в переменной, а не в файле, вы не можете sed
их напрямую. Тем не менее, это по-прежнему простой способ сделать то, что вы просите; вам просто нужно его конвейеризировать:
#!/usr/local/bin/bash
text="loremipsumNEEDLEdolorsitamet"
word="HAYSTALK"
match="NEEDLE"
echo "$text" | sed "s/$match/&$word/g"
Демонстрационный вывод:
$ ./369818.sh
loremipsumNEEDLEHAYSTALKdolorsitamet
Вставить текст j
в переменную text
в позиции p
(, считая с нуля):
p=5
text="$(seq 10)" ## arbitrary text
text="${text:0:p}j${text:p}"
Чтобы вставить текст j
перед совпадающей частью в$match
:
text="${text%%${match}*}j${match}${text##*${match}}"
Это извлекает начальную часть $text
, пока не найдет $match
, затем добавляет j
, затем $match
, затем замыкающую часть $text
, пока не найдет $match
. Будем надеяться, что $match
есть только одно совпадение в $text
!
Для надежного выполнения операции вам потребуются следующие подпрограммы обработки строк:
text_new=${text%%"${match}"*}${word}${text#*"${text%%"${match}"*}"}
# |------- A -------| |-B--| |------------ C -------------|
A
— это часть до -совпадения, то есть строка перед началом сопоставления. B
— данные для вставки. C
— это часть совпадения после -, то есть строка после окончания совпадения. bash
parameter expansion
. match_esc=$(printf '%s\n' "$match" | sed -e 's|[][^\/.*$]|\\&|g' | sed -e 'H;1h;$!d;g;s/\n/\\n/g')
word_esc=$(printf '%s\n' "$word" | sed -e 's|[\&/]|\\&|g;$!s/$/\\/')
printf '%s\n' "$text" | sed -e 'H;1h;$!d;g;'"s/$match_esc/$word_esc&/"''
sed
является более запутанным, так как мы должны убедиться, что все символы, имеющие значение для sed
и появляющиеся во входном тексте, должны быть отключены. Еще один уровень сложности заключается в том, что эти символы различны для левой и правой команд s/// команды sed.