我在bash中使用以下格式:
//评论。
我想获得一个仅带注释的新变量(没有反斜杠),我不想依赖于//开始字符串中的前两个字符。我怎么能这样做?
我试过这个:
nline=${line/%/////}
echo $nline
使用字符串替换,但它不起作用。
答案 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
等等。
如果你还想从//
字符串中删除任何周围的空格,那么你需要做更多的工作,并且不能轻易地使用字符串替换。