Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sed:如何在两个斜杠后删除字符串中的所有内容/?_Sed - Fatal编程技术网

sed:如何在两个斜杠后删除字符串中的所有内容/?

sed:如何在两个斜杠后删除字符串中的所有内容/?,sed,Sed,我有一行代码 require_once(PATH_ROOT).'/calls/inumber.php'); //this is a comment<br> 但这会删除(PATH.ROOT)之后的所有内容。'/ 我想删除注释,而不是路径。Ir不在上面的示例中,但我如何排除SED,而不是在http://之后删除,因为还有两个。 编辑:好的,任务是删除所有以至少两个斜杠开头的单行注释。跟在后面的字母/数字/符号不重要,用零代替它。唯一的例外是http://应该跳过它。示例和结果: $a

我有一行代码

require_once(PATH_ROOT).'/calls/inumber.php'); //this is a comment<br>
但这会删除(PATH.ROOT)之后的所有内容。'/
我想删除注释,而不是路径。Ir不在上面的示例中,但我如何排除SED,而不是在http://之后删除,因为还有两个。

编辑:好的,任务是删除所有以至少两个斜杠开头的单行注释。跟在后面的字母/数字/符号不重要,用零代替它。唯一的例外是http://应该跳过它。示例和结果:
$a=5//第一条评论
$a=5

$b=10;//第二条评论
$b=10

$c=15;//*&/$%§$%&/&第三条评论
$c=15

/////////////////////////////
应该是空字符串

/*测试注释*/
/*测试注释*/>无更改,因为没有两个斜杠


摘要:应该删除//之后的所有内容(包括两个//),除了http://

您可以使用量词的贪婪性质始终只删除最后一个出现的内容

$ cat ip.txt
require_once(PATH_ROOT).'/calls/inumber.php'); //this is a comment<br>
http://foo/123 //commenting stuff
a//b/c/d 1//23/4/5 //commented

$ sed 's|\(.*\)//.*|\1|' ip.txt
require_once(PATH_ROOT).'/calls/inumber.php'); 
http://foo/123 
a//b/c/d 1//23/4/5 
$cat ip.txt
需要一次(路径根)。'/calls/inumber.php')//这是一条评论
http://foo/123 //评论材料 a//b/c/d 1//23/4/5// $sed的|\(.*)/.\1 |'ip.txt 需要一次(路径根)。'/calls/inumber.php'); http://foo/123 a//b/c/d 1//23/4/5
  • sed
    允许,这有助于避免必须转义
    /
    • [/]
      [/]
      相同,这意味着它匹配单个
      /
  • \(.*\)/.
    将捕获组用于最后一组
    /
    之前的行部分,以便您可以使用
    \1
    将其放回替换部分

现在您已经改变了问题(很多),这里有一个不应该删除任何URL(file://或http://或https://或任何内容://)的sed-它忽略
://
,但在两个斜杠之后删除所有内容:

sed 's|\([^:]\)//.*$|\1|'
它匹配任何非
(保存该字符)的字符,后跟
/
,以及行尾的任何字符,只放回第一个非
字符


s
搜索
/
然后搜索任何非斜杠的内容
[^/]
零次或多次
*
然后搜索行的结尾
$
,并将其替换为零

如果要在注释之前匹配并删除任何空白,可以使用空白字符类
\s

sed 's|\s*//[^/]*$||'
请注意,在注释中不能有斜杠,因为斜杠将匹配URL作为注释,除非您识别并排除URL


如果您想保留
/
(因为您说“删除所有内容…在//”之后),您可以将它们放回:

sed 's|//[^/]*$|//|'


注意:若要删除所有PHP注释,请按照以下答案进行操作

@Xen2050您是正确的,注释中没有答案。这是什么语言,其中URL(带//)和
///code>和
////*&/$%%§$%&/&
的“注释”有效?在PHP注释中以///开头。不管接下来是什么//
还是url:
如果斜杠在引号内怎么办?@noobee你知道,像这样的PHP注释以
?>
结尾,注释也可以以
/*
开头,它们太复杂了,用一个小的sed搜索无法识别(特别是考虑到你可以在有效的PHP中引用
//
)。你真的只想删除所有的PHP注释吗?好的,这会删除像“//这是一条注释”->,但不会删除像“///我是一条长注释”或像“/////我是一条长注释”这样的注释
你能用SED来做吗?我建议你编辑这个问题来添加所有可能的案例以及完整的预期输出..目前的问题并不能解释这些场景..谢谢提示。我编辑了我的问题。我希望我解释得更好一点--我编辑了上面的问题。你能显示我的SED命令来删除e吗在//包括//?THX之后进行翻边
sed 's|\s*//[^/]*$||'
sed 's|//[^/]*$|//|'