Bash如何用什么都不替换注释反斜杠

时间:2015-11-09 13:29:05

标签: regex bash

我在bash中使用以下格式:

//评论。

我想获得一个仅带注释的新变量(没有反斜杠),我不想依赖于//开始字符串中的前两个字符。我怎么能这样做?

我试过这个:

  nline=${line/%/////}
  echo $nline

使用字符串替换,但它不起作用。

3 个答案:

答案 0 :(得分:3)

也许您想要#替换?

$ a='// this is a comment'
$ printf "%s\n" "${a#// }"
this is a comment
$ a='not a comment'
$ printf "%s\n" "${a#// }"
not a comment

正如SergA指出的那样,我们的变量提取的一些更好的模式可以节省我们对下面的sed解决方案的需求:

$ a="first //a comment"
$ printf "%s" "${a##*//}"

如果您只是希望将评论的一部分放在任何地方,您可以使用sed,如下所示:

$ a="first //a comment"
$ printf "%s\n" "$a" | sed -e 's,^.*// \?,,'
a comment

当然你可以存储在另一个变量中:

nline=$(printf "%s" "$a" | sed -e 's,^.*// \?,,')

(另请注意,我从\n

中提取了printf

答案 1 :(得分:0)

删除前两个字符:

echo ${nline:2}

答案 2 :(得分:0)

%匹配字符串的结尾。 #匹配字符串的开头。

既然你说过你不想要那些你不想要%#的人。

此外,您需要以/分隔模式转义/

nline=${line/\/\/}
echo "$nline"

这将删除字符串中的第一个//,无论它在何处或之前是什么。因此foo // comment将成为foo comment等等。

如果你还想从//字符串中删除任何周围的空格,那么你需要做更多的工作,并且不能轻易地使用字符串替换。