【问题标题】:Sed doesnt work with shell_Exec()Sed 不适用于 shell_Exec()
【发布时间】:2017-12-29 15:08:27
【问题描述】:

我有一个如下所示的文件:

#EXTM3U
#EXTINF:-1 tvg-id="A&E [Brazil]" tvg-name="A&E **" tvg-logo="http://url/2dhy3yl" group-title="FILMES & SERIES",A&E **
http://url/live/Enrico/321/6660.ts
#EXTINF:-1 tvg-id="A E [Brazil]" tvg-name="AeE" tvg-logo="http://url/2dhy3yl" group-title="FILMES & SERIES",AeE
http://url/live/Enrico/321/232.ts
#EXTINF:-1 tvg-id="A&E [Brazil]" tvg-name="BR: AeE *" tvg-logo="http://URL/2dhy3yl" group-title="FILMES & SERIES",AeE *
http://url/live/Enrico/321/5171.ts
#EXTINF:-1 tvg-id="A&E HD [Brazil]" tvg-name="A&E HD" tvg-logo="http://URL/2dhy3yl$
http://url/live/Enrico/321/4057.ts

我想删除包含 **(双星号)、单星号后跟双引号 (*") 和 (tvg-name="BR:) 字符串的所有内容。 我设法用 sed 做到了,但它不能在 php shell_exec() 上运行;

这是我的 sed 代码

sed -i '/\*\*/d' ./filename
sed -i '/tvg-name="BR:/d' ./filename
sed -i '/\*"/d' ./filename

如何使用 shell_exec 或任何其他 php 函数执行此操作? 谢谢!

【问题讨论】:

  • 你为什么使用 sed 而不是简单地在 PHP 中使用正则表达式?
  • ^.*(?:\*[*"]|tvg-name="BR:).*$\n?

标签: php regex bash sed shell-exec


【解决方案1】:

对于 PHP,假设文件的内容已经被收集到 $sContents 参数中:

$sContents = preg_replace('/(\*\*|\*"|"BR:)/', '', $sContents);

对于 sed:

sed -e 's/\*\*//' -e 's/\*"//' -e 's/"BR://' filename

sed 很老了,Perl 更强大,使用和 PHP 一样的正则表达式逻辑:

perl -pe 's/(\*\*|\*"|"BR:)//' filename

【讨论】:

  • 谢谢,这让我发疯了。这解决了我的问题。
  • @EnricoMendonca 假设这对您有用,请单击复选标记以接受此答案。您可以通过点击向上或向下箭头来投票选出最佳答案。
猜你喜欢
  • 2016-03-08
  • 2013-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-29
相关资源
最近更新 更多