免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4456 | 回复: 4

php中使用sed替换行问题 [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2010-08-23 17:23 |显示全部楼层
  1. <?php
  2. //旧行
  3. $line = "5 file2 file2_author1_1282535343 author1 cate2 1282535343";
  4. //新行
  5. $newline = $linenum." ".$filename." ".$filename."_".$author."_".$time." ".$author." ".$newcate." ".$time." ".$this->edittime;
  6. //新行赋值结果:5 hello hello_man_1282535343 man oops 1282535343 1282551596

  7. //$list为文件全名,包括绝对路径。php的行替换需要把整个文件读入数组,元素重新赋值之后再重组文件,相当耗费资源,于是想用sed。
  8. `sed -i "s/$line/$newline/g" $list`;
复制代码
以上执行无结果;
在控制台模拟是正常的:
  1. sed  "s/$line/$newline/g" $cate
  2. 1 file2 file2_author1_1282532980 author1 cate2 1282532980
  3. 2 file2 file2_author1_1282532985 author1 cate2 1282532985
  4. 3 file2 file2_author1_1282532986 author1 cate2 1282532986
  5. 4 file2 file2_author1_1282533027 author1 cate2 1282533027
  6. 5 hello hello_man_1282535343 man oops 1282535343 1282551596
复制代码
sed嵌入到php脚本不能这样用吗?我在php中使用过awk,用于获取指定第一个字段的行,工作正常。本例中的$line就是这样获得的。
  1.     $line = `awk '$1==$linenum' $list`;
  2. //$linenum为第一个字段,具有唯一性。
  3.     return $line;
复制代码

论坛徽章:
0
发表于 2010-08-23 17:33 |显示全部楼层
不懂php,帮顶

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2010-08-23 17:40 |显示全部楼层
谢帮顶
搜索过论坛了,只有一个帖子相关,但是那个不涉及sed和php之间的变量引用。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2010-08-24 08:02 |显示全部楼层
顶上去

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2010-08-24 09:22 |显示全部楼层
解决。
  1. <?php
  2. $line = `awk '$1==$linenum' $list`;
  3. //这样得到的$line行尾会有一个空格,
  4. $line = trim($line);
  5. //这样处理之后,
  6. $command="/bin/sed -i 's/$line/$newline/g' $list";
  7. exec($command);
  8. //成功
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP