我的PHP文件中有这个字符串:
$sql = "SELECT p.pac_rut a, ";
$sql .= " p.pac_dig b, ";
$sql .= " p.pac_apepat c, ";
$sql .= " p.pac_apemat d, ";
$sql .= " p.pac_nombre e, ";
$sql .= " to_char(p.pac_fecha_nac,'dd/mm/yyyy') as f, ";
$sql .= " (to_char(sysdate,'yyyy')-to_char(p.pac_fecha_nac,'yyyy')) as g, ";
$sql .= " p.sex_cod h ";
$sql .= "FROM mytable ";
$sql .= "WHERE p.pac_rut=$rut";
我想将其转换为一个字符串,例如:
$sql = "SELECT p.pac_rut a, p.pac_dig b, p.pac_apepat c, p.pac_apemat d, p.pac_nombre e, to_char(p.pac_fecha_nac,'dd/mm/yyyy') as f, (to_char(sysdate,'yyyy')-to_char(p.pac_fecha_nac,'yyyy')) as g, p.sex_cod h FROM salud.pacientes p WHERE p.pac_rut=$rut";
如何使用sed
或awk
或其他UNIX工具执行此操作?
答案 0 :(得分:0)
试试这个:
sed ':a;N;$!ba;s/\n/ /g' | sed 's/"; $sql .= "//g'
第一个sed命令用于替换新行字符' \ n'。如何用我在这里找到的sed替换换行符:How can I replace a newline (\n) using sed?
希望这有帮助。
答案 1 :(得分:0)
如果您将代码粘贴到file.txt
,您可以这样做:
sed -r 's/\$sql\s*\.?=\s*"(.*)";\s*/\1/' file.txt | sed -r 's/^\s+//' | tr '\n' ' ' | sed -r 's/(.*)/$sql = "\1"/'
输出:
$sql = "SELECT p.pac_rut a, p.pac_dig b, p.pac_apepat c, p.pac_apemat d, p.pac_nombre e, to_char(p.pac_fecha_nac,'dd/mm/yyyy') as f, (to_char(sysdate,'yyyy')-to_char(p.pac_fecha_nac,'yyyy')) as g, p.sex_cod h FROM mytable "
但我认为你真正想做的是解析PHP文件,搜索$sql =...
之类的行,并用一行版本替换它们。要实现这一点,您应该编写脚本/程序:
^\s*\$sql\s*\.?=\s*"(.*)".*$
开头的行(不是tetsted)因此,如果匹配的行为5, 6, 7, 11, 12, 13
,则序列为 5, 6, 7
且 11, 12, 13