关于正则表达式:如何检查字符串是否是注释?

How to check if string is a comment?

本问题已经有最佳答案,请猛点这里访问。

如何检查字符串是否以""开头?

1
#path /var/dumpfolder

我尝试了

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

有更好的方法吗?


我仍然不明白你想做什么,但是你的标签中有bash,所以这里有一个针对EDOCX1的bash解决方案(10)。

1
string='#path /var/dumpfolder'
1
2
3
4
5
if [[ $string == \#* ]]; then
    echo 'yes'
else
    echo 'no'
fi

或:

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

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

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

这将删除#字符(如果存在)。如果它不存在,那么字符串将保持完整。

编辑:

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

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


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

Regular expression visualization

在Debuggex上编辑实时

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

  • ^表示字符串的开头
  • \s*是指多出一个空间来处理可能在#
  • [#]或只是#工作,这检查第一个字母是#
  • (.*)抓取所有(大部分)字符并将它们放入捕获组。
  • $停在字符串的末尾

这样可以删除代码中的和注释前面的空格。

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


I basically want to check if string is commented if so, I want to
remove that comment '#' from string and keep it. Yes a message or
storing string without the comment.

所以

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

示例(带文件):

1
2
3
4
5
6
7
8
9
10
11
kent$ cat f
#c1
 #c2
foo
bar

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

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

1
grep -E '^#?path' file

为了准确地找到#path,不要添加?

1
grep -E '^#path' file

更常见的是添加一个空格,但分隔符也可以是一个制表符:

1
grep -E '^#path ' file

使用awk

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