1

特に微調整が必​​要な.sqlファイルがあります。

[xx_blah]

上記のようなパターンは、次のように変更する必要があります。

[ブラ]

つまり、xx_prefixを削除し、大文字で次の文字を削除します。

任意のヒント?

4

3 に答える 3

3

簡単な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置換のinは、次の文字を大文字にするエスケープシーケンスです。

sedを好み、すべてのバックスラッシュから目が交差しない場合は、

$ sed -e 's/\[[^]_]\+_\(.\+\?\)]/[\u\1]/g' old.sql > new.sql
于 2009-11-26T13:54:01.623 に答える
1
sed -e 's/xx_\([a-z]\)/\u\1/' < old.sql > new.sql
于 2009-11-26T13:59:38.507 に答える
0

外部ツールなしでシェルを使用できます

#!/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
于 2009-11-26T15:15:24.457 に答える