Як вибрати розділ із рядка за допомогою bash


1

У мене є масив, що містить рядки, які складаються з шляхів до файлів у такому форматі:

/path/to/file/14561234545_50303.TXT

Я намагаюся вибрати розділ, що знаходиться після "1", але перед "_", щоб він виглядав як 4561234545 . Я намагався це зробити з sed, але поки що не зміг дістати лише цей розділ.

Чи може хто-небудь допомогти надати мені приклад того, який вираз мені потрібно витягти саме з цього розділу?


Зараз ви отримали кілька відповідей на своє запитання. Сподіваємось, вони вам корисні. Якщо так, чи не проти ви обрати одну з відповідей як прийняту відповідь?
Едвард

Відповіді:


0

Скажімо, ваш шлях зберігається в змінній bash path, використовуйте оператор смуги bash string, щоб знімати до найбільш віддалених "/ 1" символів. Тоді awk для друку до _ char.

echo $ {path ## * / 1} | awk -F_ '{print $ 1}'


перша частина, здається, працює, але коли я додаю частину awk, я нічого не отримую назад. Також я повинен зазначити, що я намагаюся призначити вихід цієї іншої змінної.
користувач2988831


0

Ваше запитання трохи не вказано, але ось коротке рішення з використанням sed (ви сказали, sed , так? ;-))

input='/path/to/file/14561234545_50303.TXT'
section=`basename $input | sed 's/^1\([^_]\+\).*/\1/'`

Пояснили:

  1. витягніть ім'я файлу з базовим іменем (я здогадуюсь, вам потрібно виконати вилучення лише в частині імені файлу)
  2. виконати SED матч наступним чином :
    1. ^1: збіг 1 на початку рядка (знову ж здогадайся, адаптуй за своїм смаком)
    2. \( [^_]\+ \): (пробіли додано для наочності) відповідають послідовності одного або декількох ( \+) символів, які не відповідають підкреслюванню, і збережіть цю послідовність у\1
    3. .*: співставте з усім, що випливає (починаючи з підкреслення, _якщо ваш внесок добре сформований)
  3. замініть відповідний текст (який є всім рядком, якщо ваш вклад добре сформований!) на послідовність символів, що не підкреслюються, що були вилучені на кроці 2.2

Вам потрібно дійсно включити .*в кінці матчу, щоб споживати решту вхідних даних. Якщо цього не зробити, заміна на кроці 3 буде діяти лише на тій частині рядка, що веде до підкреслення, і ви здивуєтеся, коли ваш вихід буде майже ідентичним вашому входу, за винятком головного 1.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.