Извлечение строки между заданным токеном

Я хочу извлечь строку из данного токена из файла, в моем случае это между%. Я выделил строки, выделенные жирным шрифтом ниже.

Содержание:

Update DIMENSIONPARAMETER set TEXTVALUE='http://%arm.se.host%:%arm.se.wls.listen.port%/CramerOSS/SyncEngineServlet/SyncProcessUnPauseServlet' where NAME='SyncEngine SyncProcessUnPauseServlet';

Он также имеет вход, где присутствует только% somestring%. Я хочу извлечь только эту строку.

0
задан 24 May 2018 в 10:25

9 ответов

если все строки в файле будет структурирована как пример, я считаю, можно использовать программу командной строки [F3] для лечения процентов знаков в качестве разделителей поля и выберите 2-ю и 4-м полях. Так что попробуйте запустить

[Ф1]

обновление: я не думаю, что нужно менять на другой формат, потому что в шаблоне [Ф4] команда выше видит [ф5] в качестве второго поля и извлекает его. Я пробовал использовать

[Ф2]

и [ф6] было напечатано в стандартный вывод.

4
ответ дан 8 June 2018 в 13:59
  • 1
    Картик, спасибо за вашу помощь – Abhijeet Anand 24 May 2018 в 10:12
  • 2
    У меня есть не только вход в вышеупомянутые форматы, Есть и другие файлы, в которых я%%% просто присутствует. Таким образом, я в основном хочу сократить эту строку между этими двумя токенами. – Abhijeet Anand 24 May 2018 в 10:14
  • 3
    Я хочу только извлечь эту строку между двумя токенами не всю строку, в которой она присутствует. – Abhijeet Anand 24 May 2018 в 10:21
  • 4
    @картик, его не принимает ... выход-разделитель получать это:шлиц: незаконный вариант -- использование: вырезать -б [-н] [файл...] или: вырезать с лист [файл...] или: вырезать -Ф список [-D персонажей] [-с] [файл...] – Abhijeet Anand 24 May 2018 в 11:39
  • 5
    Здорово! Если через [Ф1] помогли вам тогда тоже попробовать [Ф2], поскольку в [Ф3] должны игнорировать все строки, которые не содержат разделитель И сделать [Ф4]'s работы. – Kartik Sabharwal 24 May 2018 в 12:48

Если все строки в файле будут структурированы, как в примере, я считаю, что вы можете использовать программу командной строки cut, чтобы обрабатывать знаки процента как полевые разделители и выбирать 2-е и 4-е поля. Поэтому попробуйте запустить

cut -d "%" -f 2,4 --output-delimiter="," <file_name

Обновление: я не думаю, что что-то нужно изменить для другого формата, потому что в шаблоне %string% команда выше видит string как второе поле и извлекает его , Я попытался запустить

echo "%string%" | cut -d "%" -f 2,4 --output-delimiter=","

, а string был напечатан на стандартный вывод.

4
ответ дан 17 July 2018 в 13:35

Если все строки в файле будут структурированы, как в примере, я считаю, что вы можете использовать программу командной строки cut, чтобы обрабатывать знаки процента как полевые разделители и выбирать 2-е и 4-е поля. Поэтому попробуйте запустить

cut -d "%" -f 2,4 --output-delimiter="," <file_name

Обновление: я не думаю, что что-то нужно изменить для другого формата, потому что в шаблоне %string% команда выше видит string как второе поле и извлекает его , Я попытался запустить

echo "%string%" | cut -d "%" -f 2,4 --output-delimiter=","

, а string был напечатан на стандартный вывод.

4
ответ дан 20 July 2018 в 13:40

с помощью [Ф2], как вы сказали, [Ф3]:

[Ф1]
2
ответ дан 8 June 2018 в 13:59
  • 1
    Не работает с флагом -o, получая незаконный ввод -o – Abhijeet Anand 24 May 2018 в 11:43
  • 2
    @AbhijeetAnand если [Ф1] не работает, вы уверены, что вы используете Ubuntu? – steeldriver 24 May 2018 в 14:45

Попробуйте это.

sed -r 's/[^%]*%([^%]*)%\S*(\s)*/\1\2/g'

Его легко извлечь для единственного появления с помощью sed. Для множественных вхождений я нашел что-то подобное раньше для аналогичной проблемы. Я не мог найти эту нить.

Хорошо, это обнаруживает первое появление правильно, но не второе. Не получится.

Ответ Karthik отлично работает!

0
ответ дан 8 June 2018 в 13:59
  • 1
    У меня есть не только вход в вышеупомянутые форматы, Есть и другие файлы, в которых я%%% просто присутствует. Итак, я в основном хочу разрезать эту строку между этими двумя токенами – Abhijeet Anand 24 May 2018 в 10:15
  • 2
    Любая помощь была высоко оценена – Abhijeet Anand 24 May 2018 в 10:15

попробуйте это.

sed -r 's/[^%]*%([^%]*)%\S*(\s)*/\1\2/g'

его легко извлечь за один случай с помощью СЭД. Для множественных повторениях, я нашел что-то подобное для подобных проблем. Я не мог найти что-нить.

ладно, это определяет первое вхождение правильно, но не второй случай. Не будет работать.

ответ Картик работает идеально!

0
ответ дан 17 July 2018 в 13:35

Используя grep, как вы упомянули, вы "have %string% simply present":

grep -o '%[^%]*%' infile
2
ответ дан 17 July 2018 в 13:35

Попробуйте это.

sed -r 's/[^%]*%([^%]*)%\S*(\s)*/\1\2/g'

Его легко извлечь для единственного появления с помощью sed. Для множественных вхождений я нашел что-то подобное раньше для аналогичной проблемы. Я не мог найти эту нить.

Хорошо, это обнаруживает первое появление правильно, но не второе. Не получится.

Ответ Karthik отлично работает!

0
ответ дан 20 July 2018 в 13:40
  • 1
    У меня есть не только вход в вышеупомянутые форматы, Есть и другие файлы, в которых я%%% просто присутствует. Итак, я в основном хочу разрезать эту строку между этими двумя токенами – Abhijeet Anand 24 May 2018 в 10:15
  • 2
    Любая помощь была высоко оценена – Abhijeet Anand 24 May 2018 в 10:15

Используя grep, как вы упомянули, вы "have %string% simply present":

grep -o '%[^%]*%' infile
2
ответ дан 20 July 2018 в 13:40
  • 1
    Не работает с флагом -o, получая незаконный ввод -o – Abhijeet Anand 24 May 2018 в 11:43
  • 2
    @AbhijeetAnand, если grep -o не работает, вы уверены, что используете Ubuntu? – steeldriver 24 May 2018 в 14:45

Другие вопросы по тегам:

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