Ubuntu 如何使用sed删除线前的#?

Ubuntu 如何使用sed删除线前的#?,ubuntu,sed,Ubuntu,Sed,我正在尝试取消注释(删除#)行sql session { radutmp # # See "Simultaneous Use Checking Queries" in sql.conf # sql } 这就是我尝试过的: sed -i 's/# sql/ sql/' /etc/freeradius/sites-available/inner-tunnel 但不知何故,这些空间的计算是不正确的。它在下面找

我正在尝试取消注释(删除#)行
sql

session {
        radutmp

        #
        #  See "Simultaneous Use Checking Queries" in sql.conf
#       sql
}
这就是我尝试过的:

sed -i 's/#       sql/        sql/' /etc/freeradius/sites-available/inner-tunnel
但不知何故,这些空间的计算是不正确的。它在下面找不到
#sql

,看起来输入文件使用的是制表符而不是空格。您可以使用包含制表符和空格的
[:blank::][/code>字符类:

session {
        radutmp

        #
        #  See "Simultaneous Use Checking Queries" in sql.conf
#       sql
}
sed '/#[[:blank:]]*sql/s/#//' file

该命令使用sed
#
选项将行与序列
#
匹配,零个或多个空格后跟术语
sql
,并删除第一个
#

> sed -E 's/#(\s+sql)/\1/i' /etc/freeradius/sites-available/inner-tunnel
                      ^ holds matching chunk from within first capturing group

\s
表示表示
[\t\n\r\f\v]
字符的字符类
\s+
确保在
#

之后应该有一些空格,您确定这是空格而不是制表符吗?
[:blank:]
足以匹配空格或制表符<代码>[:space:]
将匹配空格、制表符、换行符、回车符、换行符和垂直制表符。我已将其更改为
[:blank:][/code>