我需要在多个空格后替换一个单词:
实际上该文件包含此字符串:
local all all peer
我必须改变
local all all md5
我尝试了各种组合,包括
sed -i.bak 's/all[\+ ]peer/md5/g' file
没有运气。
有什么想法吗?
提前谢谢
答案 0 :(得分:4)
试试这个(使用GNU sed-Version 4.2.1
):
sed -E -i.bak 's/(all\s+)peer/\1md5/' file
答案 1 :(得分:2)
sed -r -i.bak '/^local\s+(all\s+){2}peer$/s/\S+$/md5/' file
答案 2 :(得分:2)
我错过了这个问题的一部分吗?我用上面的第一行作为内容创建了一个文件,然后在其上运行了最简单的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
答案 3 :(得分:1)
sed 's/\(all *all *\).*/\1md5/'
答案 4 :(得分:1)
试试这个:
sed -i.bak -e "s/\(all[ ]\+\)peer/\1md5/g" file
您需要转义()+
个字符。
空格可能如下:[ ]
\+
您说它应该大于0.如果在某些情况下您在“所有”和“之间没有空格”,请将其替换为*
同行“
在替换部分中,您应该使用\1
- 对第一个找到的部分的反向引用:all
,只有peer
将替换为md5
答案 5 :(得分:1)
perl -pe 's/(all[\s]+)peer/$1md5/g' your_file