Я хочу извлечь строку из данного токена из файла, в моем случае это между%. Я выделил строки, выделенные жирным шрифтом ниже.
Содержание:
Update DIMENSIONPARAMETER set TEXTVALUE='http://%arm.se.host%:%arm.se.wls.listen.port%/CramerOSS/SyncEngineServlet/SyncProcessUnPauseServlet' where NAME='SyncEngine SyncProcessUnPauseServlet';Он также имеет вход, где присутствует только% somestring%. Я хочу извлечь только эту строку.
если все строки в файле будет структурирована как пример, я считаю, можно использовать программу командной строки [F3] для лечения процентов знаков в качестве разделителей поля и выберите 2-ю и 4-м полях. Так что попробуйте запустить
[Ф1]обновление: я не думаю, что нужно менять на другой формат, потому что в шаблоне [Ф4] команда выше видит [ф5] в качестве второго поля и извлекает его. Я пробовал использовать
[Ф2]и [ф6] было напечатано в стандартный вывод.
Если все строки в файле будут структурированы, как в примере, я считаю, что вы можете использовать программу командной строки cut, чтобы обрабатывать знаки процента как полевые разделители и выбирать 2-е и 4-е поля. Поэтому попробуйте запустить
cut -d "%" -f 2,4 --output-delimiter="," <file_name
Обновление: я не думаю, что что-то нужно изменить для другого формата, потому что в шаблоне %string% команда выше видит string как второе поле и извлекает его , Я попытался запустить
echo "%string%" | cut -d "%" -f 2,4 --output-delimiter=","
, а string был напечатан на стандартный вывод.
Если все строки в файле будут структурированы, как в примере, я считаю, что вы можете использовать программу командной строки cut, чтобы обрабатывать знаки процента как полевые разделители и выбирать 2-е и 4-е поля. Поэтому попробуйте запустить
cut -d "%" -f 2,4 --output-delimiter="," <file_name
Обновление: я не думаю, что что-то нужно изменить для другого формата, потому что в шаблоне %string% команда выше видит string как второе поле и извлекает его , Я попытался запустить
echo "%string%" | cut -d "%" -f 2,4 --output-delimiter=","
, а string был напечатан на стандартный вывод.
Попробуйте это.
sed -r 's/[^%]*%([^%]*)%\S*(\s)*/\1\2/g'
Его легко извлечь для единственного появления с помощью sed. Для множественных вхождений я нашел что-то подобное раньше для аналогичной проблемы. Я не мог найти эту нить.
Хорошо, это обнаруживает первое появление правильно, но не второе. Не получится.
Ответ Karthik отлично работает!
попробуйте это.
sed -r 's/[^%]*%([^%]*)%\S*(\s)*/\1\2/g'
его легко извлечь за один случай с помощью СЭД. Для множественных повторениях, я нашел что-то подобное для подобных проблем. Я не мог найти что-нить.
ладно, это определяет первое вхождение правильно, но не второй случай. Не будет работать.
ответ Картик работает идеально!
Используя grep, как вы упомянули, вы "have %string% simply present":
grep -o '%[^%]*%' infile
Попробуйте это.
sed -r 's/[^%]*%([^%]*)%\S*(\s)*/\1\2/g'
Его легко извлечь для единственного появления с помощью sed. Для множественных вхождений я нашел что-то подобное раньше для аналогичной проблемы. Я не мог найти эту нить.
Хорошо, это обнаруживает первое появление правильно, но не второе. Не получится.
Ответ Karthik отлично работает!
Используя grep, как вы упомянули, вы "have %string% simply present":
grep -o '%[^%]*%' infile