27

我正在尝试使用 sed 但使用正则表达式取消注释文件内容(例如:[0-9]{1,5})

# one two 12
# three four 34
# five six 56

以下是有效的:

sed -e 's/# one two 12/one two 12/g' /file

但是,我想要的是使用正则表达式模式替换所有匹配项而不输入数字,但将数字保留在结果中。

4

6 回答 6

25

对于符合示例问题,只需

sed 's/^# //' file

就足够了,但如果只需要删除包含特定正则表达式的某些行上的注释,那么您可以使用条件地址

sed '/regex/s/^# //' file

所以包含的每一行都regex将被取消注释(如果行以 a开头#

...regex可能是[0-9]

sed '/[0-9]/s/^# //' file

# 在包含数字的每一行的开头删除,或

sed '/[0-9]/s/^# \?//' file

使第一个空间不需要#one two 12,甚至

sed '/[0-9]$/s/^# //' file

# 在包含数字作为最后一个字符的行的开头删除。然后

sed '/12$/s/^# //' file

将在以 .# 结尾的行开头删除12。或者

sed '/\b\(two\|three\)\b/s/^# //' file

将删除# 包含word two或的行的开头three

于 2012-12-28T19:44:13.183 回答
9
sed -e 's/^#\s*\(.*[0-9].*\)$/\1/g' filename

应该这样做。

于 2012-12-28T16:31:55.743 回答
1

如果您只希望那些包含数字的行不被注释,您可以使用这个:

sed -e 's/^#\s*\(.*[0-9]+.*\)/\1/g' file
于 2012-12-28T16:49:26.740 回答
0

以下sed命令将取消注释包含数字的行:

sed 's/^#\s*\(.*[0-9]\+.*$\)/\1/g' file
于 2012-12-28T16:48:33.573 回答
0

是否-i不需要相应文件中的替换选项?#我可以使用以下方法删除前导:

sed -i "s/^# \(.*\)/\1/g" file

为了只取消注释那些以至少一个数字序列结尾的注释行,我会这样使用它:

sed -i "s/^# \(.*[[:digit:]]\+$\)/\1/g" file

此解决方案要求注释行以一个空格字符(在 后面#)开头,但如果不适用,这应该很容易调整。

于 2012-12-28T20:55:46.377 回答
-1

我找到了。感谢大家

echo "# one two 12" | grep "[0-9]" | sed 's/# //g'

或者

cat file | grep "[0-9]" | sed 's/# //g'
于 2012-12-30T19:25:56.510 回答