У меня есть скрипт, который перечисляет кучу файлов, которые соответствуют определенным критериям. Он выводит только имена файлов, и есть куча текста, который не нужен.
Пример строки:
[gg]_Magi_-_13_[DB38165F].mkv
Что я хотел бы достичь в выводе:
[gg]_Magi_-_13
Мне удалось заменить подчеркивание, но мне не повезло в успешной обрезке [CRC32] .mkv. Также я ограничиваю количество символов и помещаю многоточие в конец, если они выходят за пределы 28 символов, но даже если оно не выходит за пределы 28 символов, оно все равно добавляет многоточие в конец.
Код для этого:
print substr( $0, 0, 28 )"[…]"}
Помощь по любой из этих проблем будет высоко ценится.
[blahblah] blahblahblahblahblah 01
и[blahblah] blahblahblahblahblah 02
оба становятся[blahblah] blahblahblahblahb...
(больше не разные файлы)Ответы:
Я думаю, что это самое короткое решение, которое отвечает всем критериям
источник
bash
тоже сделают это, что, возможно, еще короче, не говоря уже о том, чтобы быстрее. Смотри мой ответ .Первый бит удаляет
_[blah].mkv
, а второй бит печатает первые 28 символов и ставит...
в конце - но если строка меньше 28 символов, он печатает только удаленное имя файла без добавления эллипсов.Если расширение файла не всегда будет * .mkv, вы можете использовать это (в sed
$
означает «до конца строки»):источник
sed
немного излишним для такой довольно простой манипуляции со строками. Смотрите мой ответ для двух строк чистого,bash
которые достигают того же результата.Хотя
awk
,sed
и компания имеет свои достоинства, они не нужны для этого. Вы можете легко достичь всего, что просили, используя толькоbash
строковые операции и сопоставление с образцом. Предполагая, что вы присвоили свое имя файла$name
:будет отрезать тип файла и заключенный в скобки CRC из
$name
. Если вам нужно убедиться на 100%, что вы отключили только CRC, вы можете использовать расширенное регулярное выражение вместо вышеперечисленного:Усечение имен длиннее 28 символов достигается:
- две строки
bash
итога (не считая логики, цикла или другого, чтобы получить имена ваших файлов в var и, конечно же, выходной код), без внешних. Основным преимуществом является то, что код работает быстро, поскольку оболочке никогда не требуется запускать какие-либо внешние двоичные файлы.источник
Попробуйте эту функцию bash (предупреждение: не проверено):
источник
Не самое чистое решение, но вы могли бы сделать это:
РЕДАКТИРОВАТЬ: Мех, поцарапать этот ответ. Это не даст вам элипсис.
источник