使用 sed 在匹配模式的左侧插入字符?

使用 sed 在匹配模式的左侧插入字符?

这是作为输入的数据文件。

1
2
2
979
data
raw
32j
23
32323

输出:

/* 1
/* 2
/* 2
/* 979
data
raw
/* 32j
/* 23
/* 32323

如何使用 sed 获得所需的输出?匹配模式的正则表达式是^[0-9]*。

答案1

我猜你想要的是注释掉以数字开头的行。这不是^[0-9]*意味着,它将匹配所有内容,包括空行或根本没有数字的行,因为*意味着“0 或更多”,因此它将匹配文件的每一行。

因此,要注释掉以数字开头的行,您可以使用:

$ sed  '/^[0-9]/ s|^|/* |' file 
/* 1
/* 2
/* 2
/* 979
data
raw
/* 32j
/* 23
/* 32323

或者:

$ sed -E 's|^([0-9])|/* \1|' file 
/* 1
/* 2
/* 2
/* 979
data
raw
/* 32j
/* 23
/* 32323

答案2

awk '/^[0-9]/{$0="/* "$0}1' filename

/* 1
/* 2
/* 2
/* 979
data
raw
/* 32j
/* 23
/* 32323

相关内容