Сопоставление без учета регистра sed не работает

Выделение идеи Джеффа , но без использования списка:

for fname in *.*; do
    prefix=${fname%.*}
    [ ! -f "$fname" ] || [ -f "$prefix.zip" ] && continue
    zip "$prefix" "$prefix".*
done

Этот цикл перебирает все имена в текущем каталоге, которые содержат хотя бы один символ точки.

Тело цикла извлекает префикс имени файла, удаляя бит после последней точки в текущем имени файла (используйте %%вместо %, чтобы удалить из первую точку ). Затем он проверяет, было ли имя на самом деле именем обычного файла (или символической ссылкой на один из них )и существует ли уже соответствующий Zip-архив для этого файла или нет.

Если файл является обычным файлом (или символической ссылкой на него ), и если архивный файл не существует, zipвызывается для создания архива.

0
04.06.2020, 11:46
1 ответ

Я думаю, что модификатор I/i есть только у GNU sed.

Просто, если ваш sed не поддерживает I/i, вы можете использовать его, как показано ниже, чтобы избежать падеж смысл.

Назначьте переменную alias, как показано ниже, и используйте sedкак:

$ alias="[Rr][Ee][Dd]1"
$ echo "RED1.NAME and red1.NAME and red1 and Red1" | sed -e "s/\($alias\).NAME/\1.COLUMN1/g"
RED1.COLUMN1 and red1.COLUMN1 and red1 and Red1

ИЛИ , если переменная aliasявляется динамической, вы можете использовать perlили awk, как показано ниже;

$ alias="red1"
$ act_cols="NAME"
$ third_ele="COLUMN1"
$ echo "RED1.NAME and red1.NAME and red1 and Red1" | perl -pe "s/($alias).$act_cols/\1.$third_ele/gi"
RED1.COLUMN1 and red1.COLUMN1 and red1 and Red1

Использование awk:

$ echo $alias
red1
$ echo "RED1.NAME and red1.NAME and red1 and Red1" | awk -v value=$alias 'BEGIN {IGNORECASE = 1} { gsub(value".NAME",value".COLUMN1");print }'
red1.COLUMN1 and red1.COLUMN1 and red1 and Red1
2
18.03.2021, 23:30

Теги

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