如何检查字符串是否为注释?

时间:2013-09-05 22:05:03

标签: regex bash awk

如何检查字符串是否以“#”开头?

#path /var/dumpfolder 

我试过awk

awk -F '' '{print $1}'

还有更好的方法吗?

5 个答案:

答案 0 :(得分:2)

^\s*[#](.*)$

Regular expression visualization

Edit live on Debuggex

这是一个正则表达式.....如果这就是你要找的东西。

  • ^表示字符串的开头
  • \s*意味着需要另外一个空间来处理#
  • 前面可能有空格的情况
  • [#]#只会检查第一个字母是#
  • (.*)抓取所有(大多数)角色并将其投入捕获组
  • $在字符串
  • 的末尾停止

这应该可以删除代码中的#和注释前面的空格

sed 's/\^\s*[#](.*)$/\1/'

答案 1 :(得分:2)

我仍然无法理解你想要做什么,但你的标签中有,所以这里是check if string starts with '#'

的bash解决方案
string='#path /var/dumpfolder'

if [[ $string == \#* ]]; then
    echo 'yes'
else
    echo 'no'
fi

或:

if [[ ${string:0:1} == '#' ]]; then
    echo 'yes'
else
    echo 'no'
fi

如果您要删除#字符,请使用:

echo "${string#\#}" # prints 'path /var/dumpfolder'

这将删除#字符(如果存在)。如果它不存在,则字符串将保持不变。

编辑:

如果有时候有前导空格,请使用regexp:

if [[ $string =~ ^[[:space:]]*\#.*$ ]]; then
    echo "${string#*\#}"
else
    echo "$string"
fi

答案 2 :(得分:1)

如果您只想在文件中找到#pathpath(不带#)模式,请执行以下操作:

grep -E '^#?path' file

要完全找到#path,请不要添加?

grep -E '^#path' file

更明显的是添加空格,但您的分隔符也可以是标签:

grep -E '^#path ' file

答案 3 :(得分:1)

  

我基本上想检查字符串是否被评论,如果是这样,我想   从字符串中删除该注释'#'并保留它。是的消息或   存储没有评论的字符串。

所以

sed 's/^\s*#*//' 

示例(带文件):

kent$  cat f
#c1
 #c2
foo
bar

kent$  sed 's/^\s*#*//' f
c1
c2
foo
bar

答案 4 :(得分:0)

使用awk

awk '{sub(/^#/,"")}1' file