特に微調整が必要な.sqlファイルがあります。
[xx_blah]
上記のようなパターンは、次のように変更する必要があります。
[ブラ]
つまり、xx_prefixを削除し、大文字で次の文字を削除します。
任意のヒント?
特に微調整が必要な.sqlファイルがあります。
[xx_blah]
上記のようなパターンは、次のように変更する必要があります。
[ブラ]
つまり、xx_prefixを削除し、大文字で次の文字を削除します。
任意のヒント?
簡単な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
sed -e 's/xx_\([a-z]\)/\u\1/' < old.sql > new.sql
外部ツールなしでシェルを使用できます
#!/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