Получить текст из строки с разной длиной / шаблоном

У меня есть просьба спросить, как получить TextN из строки, где перед TextN есть разная длина / шаблон. Cut, sed и awk? любой пример, я ценю.

2018/08/09-20:45:50.671483-06359-06359-433191088669655042-004- TextN
2018/08/09-20:45:50.668677-06359-06359-002-006-  TextN
2018/08/09-20:45:50.668677-063-063-002-006-  TextN

Заранее спасибо.

К сожалению, ** было тегом кода детали.

Пожалуйста, отредактируйте свой Q, чтобы показать ваш точный вводимый текст, требуемый вывод этого же текста, приложите все усилия, чтобы решить проблему, указав точный текст любых сообщений об ошибках. Знаете ли вы о sed 's/targStr/replStr/' file (где replStr может быть пустым, то есть s/targStr//'. Если ваши данные не содержат символов *, удалите их, поскольку они усложняют регулярное выражение, которое может потребоваться). Удачи.

shellter 10.08.2018 17:03

если вам просто нужно последнее поле строки, см. stackoverflow.com/questions/17921544/… .. вы можете установить настраиваемый разделитель полей, используя опцию -F, по умолчанию - пробелы, которые могут быть у вас ...

Sundeep 10.08.2018 17:20
0
2
52
2

Ответы 2

если текст заключен в двойные звезды и больше нигде не существует ...

$ awk -F'**' '{print $2}' file

TextN
TextN
TextN

в противном случае опубликуйте более представительный пример.

Также с sed

$ sed -E 's/.*\*\*([^*]+)\*\*.*/\1/' file

Если в textN нет пробелов и если это последнее поле, разделенное пробелами ...

$ awk '{print $NF}' file

поскольку символы, пробелы имеют особое значение, вам нужно тщательно выбирать вводимый образец ...

Извините, каракфа. Я случайно добавил ** вокруг TextN. Я изучу ваши методы. Спасибо.

AndrewS 10.08.2018 18:34

Хорошо. Я только что понял в своих журналах, мне просто нужно пропустить первый столбец, а затем извлечь все тексты после этого. нравится. cat logs.txt | awk '{$ 1 = ""; Распечатать}'

AndrewS 10.08.2018 19:23

Чтобы завершить пример awk @ karakfa, используя sed: sed -i -E "s/.*\*\*([a-zA-Z]+)\*\*/\1/" <your-text-file>

Предыдущий пример работает, только если ваш TextN соответствует [a-zA-Z]. Вы также можете использовать что-то более сложное или добавить другие символы. Если вы на самом деле не знаете, какие символы там будут: sed -i -E "s/.*\*\*(.+)\*\*/\1/" <your-text-file>

Если ваша строка находится не в файле, а является переменной среды или просто переменной: echo $line | sed -E "s/.*\*\*(.+)\*\*/\1/"

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