2

Не стесняйтесь менять название, поскольку оно не соответствует моему вопросу 100%

У меня есть что-то вроде этого в файле:

junk
long_ass_string "/I/want/this/$code/$name" long_ass_string
junk

Уточняющий пример:

  • Часть /I/want/this/ всегда одна и та же
  • $ code и $ name являются динамическими и разными для каждой строки
  • Внутри long_ass_string может быть больше строк /I/want/this/$ code/$ name, и я хотел бы получить их все.
  • Кавычки (this => ") присутствуют в каждой строке /I/want/this/$ code/$ name .

Пока что я пытался ...

grep -w "/I/want/this/*" file # выводит long_ass_string
grep -o "/I/want/this/*" file # выводит /I / хочу / этот /

Хотелось бы избежать использования решения получения только х дополнительных символов до и / или после

2 ответа2

2

Я бы пошел с greping всех строк, а затем разобраться со вторым grep, например:

grep -o '"[^"]*"' file

Выход:

"/I/want/this/$code/$name"

Прокомментируйте, как вы используете регулярные выражения

Это выражение /I/want/this/* соответствует /I/want/this и затем ноль или более символов косой черты, вы, вероятно, имели в виду: /I/want/this/.* который соответствует /I/want/this/ и ноль или больше персонажей.

0

если я вас хорошо понимаю, вы хотите избавиться от первой переменной $ code и $ name в каждой строке. Вы можете передать свой результат, чтобы сократить для этого. Следуя вашему примеру:

grep "/I/want/this/" myfile.txt | cut -d '/' -f 1-4,7-

с помощью -d вы определяете разделитель (например, символ / ) и с помощью -f вы указываете поле для захвата.
В этом случае от разделителя 1 до 4 ( /I/want/this/ ) и всех полей, которые идут после седьмого разделителя (что делается с аргументом 7- ). Подобным образом вы убираете /$code/$name которые находятся между 4-й и 7-й разделитель во всех строках, которые соответствуют определенному регулярному выражению.

echo "/I/want/this/NOT/THAT/and/everythingelse" | grep "/I/want/this/" | cut -d '/' -f 1-4,7- 
/I/want/this/and/everythingelse

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .