Linux:将5行字符串转换为1行字符串

时间:2014-08-11 13:02:37

标签: php string lines

我的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";

如何使用sedawk或其他UNIX工具执行此操作?

2 个答案:

答案 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 =...之类的行,并用一行版本替换它们。要实现这一点,您应该编写脚本/程序:

  1. 逐行解析PHP文件
  2. 搜索以^\s*\$sql\s*\.?=\s*"(.*)".*$开头的行(不是tetsted)
  3. 记住所有匹配线的位置,
  4. 从所有匹配行获取SQL代码
  5. 将来自匹配行序列的sql代码加入一行
  6. 用连接的sql代码
  7. 依次替换第一行
  8. 按顺序删除其他行
  9. 重复其他序列
  10. 因此,如果匹配的行为5, 6, 7, 11, 12, 13,则序列为 5, 6, 7 11, 12, 13

相关问题