如何用sed替换Linux文件前7行中以'88'结尾的单词?
解决sed替换以88结尾单词的问题
你的原命令sed -e '1,7 s/\<.*88\>//g'之所以会替换整行内容,是因为.*是贪婪匹配——它会从第一个单词的起始边界(\<)开始,匹配所有字符(包括空格)直到最后一个以88结尾的单词的结束边界(\>),最终导致整行被清空。
正确的sed命令
要精准匹配单个以88结尾的单词并替换为空格,使用以下命令:
sed '1,7 s/\<[^[:space:]]*88\>/ /g' matricole.testo
命令细节说明
1,7:限定仅对文件的前7行执行操作\<:匹配单词的起始位置,确保只从单个单词开头开始匹配[^[:space:]]*:匹配任意数量的非空格字符,避免跨单词匹配88:指定单词的结尾内容\>:匹配单词的结束位置,确保只匹配完整的单个单词/ /g:将匹配到的单词替换为空格,g标记表示处理一行内所有符合条件的单词
如果目标仅针对数字类单词(如示例中的1988),可以用更精准的正则:
sed '1,7 s/\<[0-9]*88\>/ /g' matricole.testo
执行后的结果
运行上述命令后,文件内容将与预期一致:
paolo rossi giovanna d'arco 1945 francesco totti francesco gabbani 1967 andrea presti 1957 franco taoli 1945 giuseppe verdi 1987
内容的提问来源于stack exchange,提问作者Vito Martiradonna
相关产品推荐
相关产品推荐

