我正在尝试使用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
如果只需要删除包含特定正则表达式的某些行的注释,则可以使用条件address:
sed '/regex/s/^# //' file
所以每一行包含regex
的内容都会被取消注释(如果该行以#
开头)。
...其中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
将删除包含单词two
或three
的行开头的#
符号。
regex
,你可以使用[0-9]
来仅影响带有数字的行,或者使用[0-9]$
如果数字必须位于末尾。 - cHaosed -e 's/^#\s*\(.*[0-9].*\)$/\1/g' filename
如果您只想取消注释包含数字的行,可以使用以下方法:
sed -e 's/^#\s*\(.*[0-9]+.*\)/\1/g' file
在相应的文件中,替换时是否需要使用-i
选项?我可以通过以下方式删除前导#
:
sed -i "s/^# \(.*\)/\1/g" file
sed -i "s/^# \(.*[[:digit:]]\+$\)/\1/g" file
这个解决方案要求注释行以一个空格字符(紧跟在#
后面)开头,但如果不适用,那应该很容易调整。
sed
命令将会取消注释包含数字的行:sed 's/^#\s*\(.*[0-9]\+.*$\)/\1/g' file
我找到了。谢谢大家。
echo "# one two 12" | grep "[0-9]" | sed 's/# //g'
或者
cat file | grep "[0-9]" | sed 's/# //g'
sed
。我对最高分答案做出了重大改变(在审核中进行编辑),并请求@starryknight64进行审核并选择一个答案。 - dank8