我用
安装了REGEX支持apt-get install sqlite3 sqlite3-pcre
现在我可以在bash控制台上的查询中使用REGEX,如
DB="somedb.db"
REGEX_EXTENSION="SELECT load_extension('/usr/lib/sqlite3/pcre.so');"
sqlite3 $DB "$REGEX_EXTENSION select * from sometable where name REGEXP '^[a-z]+$'"
但是如何使用正则表达式使用sqlite查询更新字符串?
答案 0 :(得分:4)
默认情况下,Sqlite不提供regex_replace函数。您需要将其作为扩展名加载。以下是我设法做到的事情。
Download this C code for the extension (icu_replace)
使用
编译gcc --shared -fPIC -I sqlite-autoconf-3071100 icu_replace.c -o icu_replace.so
在sqlite3 runn下面的命令帖子上面提到的命令已经运行并创建了一个文件icu_replace.so
SELECT load_extension(' path to icu_replace.so', 'sqlite3_extension_init') from dual;
在此之后,您将能够使用以下功能: -
select regex_replace('\bThe\b',x,'M') from dual;
答案 1 :(得分:2)
以下内容构建了具有动态库支持的最新sqlite,并编译了ICU extension和regex_replace extension。它还假定基于debian的linux发行版:
html {
background-image: -webkit-linear-gradient(65deg, #A683E3 50%, #E4E9FD 50%);
}
结果,您将拥有:
sudo apt build-dep sqlite3 # fetches dependencies to compile sqlite3
mkdir sqlite-compilation
cd sqlite-compilation
wget -O sqlite.tar.gz https://www.sqlite.org/src/tarball/sqlite.tar.gz?r=release
tar xzf sqlite.tar.gz
mkdir build
cd build
../sqlite/configure
make OPTS='-DSQLITE_ENABLE_LOAD_EXTENSION'
./sqlite3 -cmd 'pragma compile_options;' <<< .exit
cd -
# https://sqlite.org/src/dir?name=ext/icu
cd sqlite/ext/icu
sed -i 's/int sqlite3_icu_init(/int sqlite3_extension_init(/' icu.c
sed -i 's/int sqlite3IcuInit(/int sqlite3_extension_init(/' sqliteicu.h
gcc -g -O2 -shared icu.c -fPIC -I ../../../build `pkg-config --libs icu-i18n` -o libSqlite3Icu.so
cp libSqlite3Icu.so ../../../build/
cd -
# https://github.com/gwenn/sqlite-regex-replace-ext
cd sqlite/ext
wget -O sqlite-regex-replace-ext-master.zip https://github.com/gwenn/sqlite-regex-replace-ext/archive/master.zip
unzip sqlite-regex-replace-ext-master.zip
cd sqlite-regex-replace-ext-master
gcc -g -O2 -shared icu_replace.c -fPIC -I ../../../build -o libSqlite3IcuReplace.so
cp libSqlite3IcuReplace.so ../../../build/
cd -
cd ../../
测试:
build/sqlite3 # sqlite3 binary
build/libSqlite3Icu.so # unicode support
build/libSqlite3IcuReplace # regex_replace function