изменить файл sql при помощи командной строки в unix - PullRequest
1 голос
/ 26 ноября 2009

У меня есть файл .sql, который нужно немного настроить, в частности:

[xx_blah]

любой шаблон, подобный приведенному выше, необходимо изменить на:

[Ли]

т.е. удалите xx_prefix и следующий символ в верхнем регистре.

какие-нибудь советы?

Ответы [ 3 ]

3 голосов
/ 26 ноября 2009

Простой blah замена:

$ sed -e 's/\[[^]]*_blah]/[Blah]/g' old.sql > new.sql

Более общее:

$ perl -pe 's/\[[^]_]+_(.+?)]/[\u$1]/g' old.sql > new.sql

Причина совпадения префикса с [^]_]+ вместо .+ состоит в том, что квантификаторы регулярных выражений являются жадными. Например, последний, если дать [xx_blah][xx_blah] в качестве входных данных, будет сожрать как можно больше и соответствовать xx_blah][xx, а не тому, что вы предполагали. Исключение правой скобки и подчеркивания - это остановка безопасности.

\u в замене - это escape-последовательность , которая в верхнем регистре следующая буква.

Если вы предпочитаете sed и ваши глаза не пересекаются со всеми обратными слешами, используйте

$ sed -e 's/\[[^]_]\+_\(.\+\?\)]/[\u\1]/g' old.sql > new.sql
1 голос
/ 26 ноября 2009
sed -e 's/xx_\([a-z]\)/\u\1/' < old.sql > new.sql
0 голосов
/ 26 ноября 2009

вы можете просто использовать оболочку без внешних инструментов

#!/bin/bash
declare -a arr
while read -r -a arr
do
    for((i=0;i<=${#arr};i++))                    
    do
        case "${arr[i]}" in
            *"[xx_"* );;&
            *"["*)
                arr[i]=${arr[i]//xx_/}
                arr[i]=${arr[i]^^${arr[i]:1:1}}
        esac
    done
    echo ${arr[@]}
done < "file"

пример вывода при запуске

PS1> more file
this is first line
this is second line
[xx_blah]
this is fourth line
blah [xx_blah] blah [xx_blah]
[someText]
end

PS1> ./mychanger.sh
this is first line
this is second line
[Blah]
this is fourth line
blah [Blah] blah [Blah]
[SomeText]
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...