Remane Filename путем переключения того, что находится до и после подчеркивания

Похоже, что вы пытаетесь изменить разрешения, назначенные по умолчанию файлу при его создании.

Если это так, я думаю, что вам нужно проверить help umask .

Параметр umask определяет, какие разрешения назначаются файлу (или каталогу) при его создании. (Существуют и другие факторы; Я не пытаюсь дать здесь учебное пособие, только определение и отправную точку. Если вы знаете поисковый термин для использования вашего исследования может быть намного быстрее.)

-121--228279-

Это JSON, и linux инструменты не очень хороши для работы с JSON. И ваши условия не очень ясны... Но этот perl one-liner производит из вашего примера строку "I win"

perl -0777 -nE 's/.*"(.+?)","confidence".*/$1/s; say'
-121--173898-

"Простой" ответ - использовать sed :

sed -n 's/.*\("[^"]*"\),"confidence".*/\1/p' filename

Это напечатает "I win" . Чтобы исключить кавычки (и получить только я выигрываю в качестве вывода), Переместите первые две двойные кавычки в команде за пределы скобок:

sed -n 's/.*"\([^"]*\)","confidence".*/\1/p' filename

Лучший ответ - получить инструмент, предназначенный для анализа данных JSON.

0
02.11.2018, 17:55
3 ответа

Вы можете использовать раскрытие параметров для извлечения частей строк. #удаляет слева, %удаляет справа, удвоение символа удаляет самое длинное совпадение.

#! /bin/bash
for f in ABCD_20181102.jpg DEDE_2_20181030.jpg ; do
    suffix=${f#*.}
    before_underscore=${f%%_*}
    after_underscore=${f#*_}
    after_underscore=${after_underscore%.$suffix}
    if [[ $after_underscore = *_* ]] ; then
        before2=${after_underscore%_*}
        after2=${after_underscore#*_}
        after_underscore="$after2"_"$before2"
    fi
    echo mv "$f" "$after_underscore"_"$before_underscore.$suffix"
done

Просто удалите echoперед mv, как только вы убедитесь, что скрипт делает то, что вам нужно.

0
28.01.2020, 04:10

Если у вас есть переименование Ларри Уолла, то

rename -n -e 's/.*_.*/$2_$1/' «file list»

Удалите -nдля включения, если вывод показывает, что он будет делать это правильно. (Вышеизложенное только говорит вам, что он будет делать, но не будет этого делать.)

0
28.01.2020, 04:10

Сmmv:

$ mmv -n '*_*.jpg' '#2_#1.jpg'
ABCD_20181102.jpg -> 20181102_ABCD.jpg
DEDE_2_20181030.jpg -> 2_20181030_DEDE.jpg

(удалите -nкак только убедитесь, что все работает правильно ).

0
28.01.2020, 04:10

Теги

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