0

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

#path /var/dumpfolder 

我试过 awk

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

有没有更好的方法?

4

5 回答 5

3

我仍然无法理解您要做什么,但是您的标签中有,所以这里有一个 bash 解决方案check if string starts with '#'

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'

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

编辑:

如果有时有前导空格,则使用正则表达式:

if [[ $string =~ ^[[:space:]]*\#.*$ ]]; then
    echo "${string#*\#}"
else
    echo "$string"
fi
于 2013-09-05T22:25:24.380 回答
2
^\s*[#](.*)$

正则表达式可视化

在 Debuggex 上实时编辑

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

  • ^表示字符串的开始
  • \s*表示多一个空格来处理 # 前面可能有空格的情况
  • [#]或者只是#检查第一个字母是#
  • (.*)抓住所有(大部分)角色并将它们扔到一个捕获组中
  • $停在字符串的末尾

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

sed 's/\^\s*[#](.*)$/\1/'
于 2013-09-05T22:08:11.077 回答
1

我基本上想检查是否对字符串进行了评论,如果有的话,我想从字符串中删除该评论“#”并保留它。是的,没有评论的消息或存储字符串。

所以

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

示例(带文件):

kent$  cat f
#c1
 #c2
foo
bar

kent$  sed 's/^\s*#*//' f
c1
c2
foo
bar
于 2013-09-05T22:15:47.030 回答
1

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

grep -E '^#?path' file

#path准确查找,请不要添加?

grep -E '^#path' file

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

grep -E '^#path ' file
于 2013-09-05T22:09:25.940 回答
0

使用awk

awk '{sub(/^#/,"")}1' file
于 2013-09-06T05:14:00.397 回答