我有这样的一行
"RU_28" "CDM_279" "CDI_45"
"RU_567" "CDM_528" "CDI_10000"
我想获得以下结果
"RU_28" "CDM_Unusued" "CDI_45"
"RU_567" "CDM_Unusued" "CDI_10000"
对文件中的所有行执行此操作
我正在使用此命令:
sed 's/\"CDM_\w*\"/\"Unusued\"/g' File1.txt > File2.txt
它似乎不起作用。
提前致谢!!!
答案 0 :(得分:2)
您可以使用:
sed -i.bak 's/"\(CDM_\)[^"]*"/"\1Unused"/' file1.txt
答案 1 :(得分:1)
你实际上并没有在右侧留下“CDM_”。你的替换说“用未授权替换CDM_和任意数量的单词”。做你真正想做的事情的常用方法是在你想要保留的左边的部分周围使用括号,然后使用反向引用来指示它们在右边的位置。在这种情况下,您只需要一个反向引用,由\1
表示:
sed 's/"\(CDM_\)\w*"/"\1Unusued"/g' File1.txt > File2.txt
注意左侧括号前的反斜杠;如果对sed
使用-r
(我认为),对于扩展的正则表达式,可以省略这些,但是原样,它们是必需的,因此sed
知道它们不是字面的。
编辑:我已经更新了命令,以响应Birei的准确评论,并注意到双引号无关紧要。 (请注意,括号中的那些仍然是必需的。)