Regex 在多个空格后替换单词
我需要在多个空格后替换一个单词: 实际上,该文件包含以下字符串:Regex 在多个空格后替换单词,regex,replace,sed,Regex,Replace,Sed,我需要在多个空格后替换一个单词: 实际上,该文件包含以下字符串: local all all peer 我必须用它来换 local all all md5 我尝试了各种组合,包括 sed -i.bak 's/all[\+ ]peer/md5/g' file 没有运气 有什么想法吗 提前使用T
local all all peer
我必须用它来换
local all all md5
我尝试了各种组合,包括
sed -i.bak 's/all[\+ ]peer/md5/g' file
没有运气
有什么想法吗
提前使用Thx试试这个(使用GNU-sed版本4.2.1):
逗号分隔符
试试这个:
sed -i.bak -e "s/\(all[ ]\+\)peer/\1md5/g" file
您需要转义()+
字符。
空格可以是这样的:[]
如果\+
您说它应该大于0。如果在某些情况下,“所有”和“对等”之间没有空格,请将其替换为*
在替换部件中,您应该使用
\1
-返回对第一个找到的部件的引用:全部
,并且只有对等
将被替换为md5
我是否缺少此问题的某些部分?我制作了一个以上面第一行为内容的文件,然后对其运行尽可能简单的sed命令。。。第二行就出来了
~ >cat test.txt
local all all peer
~ >sed 's/peer/md5/g' test.txt
local all all md5
可以很好地处理多行
~ >cat test.txt
local all all peer
local all all peer
local all all peer
local all all peer
local all all peer
local all all peer
~ >sed 's/peer/md5/g' test.txt
local all all md5
local all all md5
local all all md5
local all all md5
local all all md5
local all all md5
唯一不起作用的是,如果“peer”一词出现在一行中的其他地方,而您不希望它被md5替换
此项仅替换搜索词的第一次出现:
~ >cat test.txt
local all all peer
local all all peer
local all all peer
local all all peer
local all all peer
local all all peer
~ >sed '0,/peer/s//md5/' test.txt
local all all md5
local all all peer
local all all peer
local all all peer
local all all peer
local all all peer
这也将删除前面的
all…
子字符串。@David hmmm,我现在再次测试了它,它与GNU-sed版本4.2.1
一起工作。我可以做一个屏幕截图。@David顺便说一句。我在另一条评论中读到,您只需要在一行中替换?这不是你的问题:困惑:恩多,是的,但这不是重点。。。我可以更改包含该内容的所有行(只有一行),重点是我只需要在跟随“local all”时替换peer一词,其他所有内容保持原样:)只有在跟随时:是的,你是对的,我的代码总是删除peer(结尾的每个词),对不起。但是我会研究它:)+1我会将all+
概括为all[[:space:][]+
来选择选项卡以及spaces@David那么,最好将答案标记为正确答案。:)@斯派克:谢谢。。。我不知道我必须这么做。。。我认为答案会自动获得更多的选票,也许s/\bpeer\b/md5/
或s/\/md5/
是出于安全考虑。嗨,罗恩,是的,有多行带有“local-all-all”和多行以“peer”结尾:。。。这改变了每一行的单词peer!这不是我想要的。嘿,大卫,把所有的标准都放在这个问题上是个好主意。:-)抱歉@RonSavage:)你说得对。。。我总结得太多了。谢谢Kostanos,但我得到了以下错误:sed:-e expression#1,char 1:unknown命令:`-'对不起,-I和-e参数的顺序不正确。已编辑答案,请再试一次。此答案也适用!:)谢谢
~ >cat test.txt
local all all peer
~ >sed 's/peer/md5/g' test.txt
local all all md5
~ >cat test.txt
local all all peer
local all all peer
local all all peer
local all all peer
local all all peer
local all all peer
~ >sed 's/peer/md5/g' test.txt
local all all md5
local all all md5
local all all md5
local all all md5
local all all md5
local all all md5
~ >cat test.txt
local all all peer
local all all peer
local all all peer
local all all peer
local all all peer
local all all peer
~ >sed '0,/peer/s//md5/' test.txt
local all all md5
local all all peer
local all all peer
local all all peer
local all all peer
local all all peer
perl -pe 's/(all[\s]+)peer/$1md5/g' your_file