我试图用来sed
替换一行文本,以使找到的文本保持完整,并在其末尾添加一个冒号。
具体来说,在文件中,有一堆这种格式的行
CWMPVendorXEventCodeCutOff 20
CWMP<othertitle> 20
我想把它们变成这种格式
CWMPVendorXEventCodeCutOff: 20
CWMP<othertitle>: 20
我现在在这个
sed 's_CWMP.*?\\s_CWMP.*?:_g'
但这显然行不通。我将如何去做呢?
sed 's/\<CWMP[^[:blank:]]*/&:/' file
的&
在更换部分将由该取代的正则表达式的一部分相匹配的字符串替换。这将匹配CWMP
后跟任意数量的非空白字符。将\<
在模式的开始将确保该字符串CWMP
出现在最开始一个字的(即不是作为一个子字符串别的地方)。
用
sed 's/^CWMP[^[:blank:]]*/&:/' file
如果您需要在行的开头强制进行匹配。
在某些情况下,您还可以使用
awk '$1 ~ /^CWMP/ { $1 = $1 ":"; print }' file
假设您想将第一个以空格分隔的单词与匹配^CWMP
,然后:
在该单词的末尾添加a 。但是,这将“吃掉”这些行上两个字段之间的所有空格,并用一个空格替换它们:
$ awk '$1 ~ /^CWMP/ { $1 = $1 ":"; print }' file
CWMPVendorXEventCodeCutOff: 20
$1 ~
如果要在每行的开始处进行匹配(即,如果您的行不包含初始缩进),请删除。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句