Ben*_*Ben 4 ksh shell-script text-processing sql
我正在编写的 Korn 脚本的一部分要求我'
用两次出现 ( ''
)替换所有出现的字符。我试图将我在此脚本中生成的一些 SQL 记录到另一个表中的列中,但需要用单引号字符的 2 个实例替换单引号。我知道某处一定有此功能的示例,但我没有找到特定于任何地方的变量的字符串替换示例。
在 ksh93 和 zsh 中,有一个字符串替换构造${VARIABLE//PATTERN/REPLACEMENT}
,在以下代码段中使用了两次:一次替换'
为''
,一次替换换行符'+char(10)+'
。如果输入字符串中没有换行符,则可以省略第二个赋值命令。
quoted_string=\'${raw_string//\'/\'\'}\'
quoted_string=${quoted_string//$'\n'/"'+char(10)+'"}
Run Code Online (Sandbox Code Playgroud)
这个构造也可以在 bash 中使用,但引用规则不同。以下代码段适用于所有 ksh93、bash 和 zsh。
quoted_string=\'${raw_string//$'\''/$'\'\''}\'
quoted_string=${quoted_string//$'\n'/$'\'+char(10)+\''}
Run Code Online (Sandbox Code Playgroud)
在ksh88等shell中,需要写一个比较复杂的循环,一次替换一个单引号。以下代码段将单引号加倍,但换行符保持不变)。
q="$raw_string"; quoted_string=
while
quoted_string="$quoted_string'${q%%\'*}'"
case "$q" in *\'*) q="${q#*\'}";; *) false;; esac
do :; done
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用 sed。将数据提供给 sed 时要小心,因为echo
并不总是按原样打印其参数。
quoted_string="'$(printf '%s\n' "$raw_string" |
sed -n -e "s/'/''/g" -e 'H' \
-e '$ g' -e 's/^\n//' -e "s/\\n/'+char(10)+'/g" -e '$ p')'"
Run Code Online (Sandbox Code Playgroud)
如果字符串中没有换行符,则以下更简单的 sed 命令就足够了。
quoted_string="'$(printf '%s\n' "$raw_string" | sed -e "s/'/''/g")'"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
16943 次 |
最近记录: |