我正在尝试使用 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
但是,我想要的是使用正则表达式模式替换所有匹配项而不输入数字,但将数字保留在结果中。
对于符合示例问题,只需
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
。
sed -e 's/^#\s*\(.*[0-9].*\)$/\1/g' filename
应该这样做。
如果您只希望那些包含数字的行不被注释,您可以使用这个:
sed -e 's/^#\s*\(.*[0-9]+.*\)/\1/g' file
以下sed
命令将取消注释包含数字的行:
sed 's/^#\s*\(.*[0-9]\+.*$\)/\1/g' file
是否-i
不需要相应文件中的替换选项?#
我可以使用以下方法删除前导:
sed -i "s/^# \(.*\)/\1/g" file
为了只取消注释那些以至少一个数字序列结尾的注释行,我会这样使用它:
sed -i "s/^# \(.*[[:digit:]]\+$\)/\1/g" file
此解决方案要求注释行以一个空格字符(在 后面#
)开头,但如果不适用,这应该很容易调整。
我找到了。感谢大家
echo "# one two 12" | grep "[0-9]" | sed 's/# //g'
或者
cat file | grep "[0-9]" | sed 's/# //g'