Unix Sed仅替换精确匹配
我不想在文件中用Unix Sed仅替换精确匹配,unix,sed,Unix,Sed,我不想在文件中用Europe12\u yesturday替换像Europe12这样的字符串。不更改文件中也存在的Europe12-36字符串 我试过: $basename=Europe12 sed -i 's/\b$basename\b/${basename}_yesterday/g' file.txt 但这也改变了欧洲12-36字符串。手动构造所需的分隔符列表,而不是使用\b,\W或\需要空格或行尾字符: sed 's/Europe12\([ ]|$\)/Europe12_yesturday
Europe12\u yesturday
替换像Europe12
这样的字符串。不更改文件中也存在的Europe12-36
字符串
我试过:
$basename=Europe12
sed -i 's/\b$basename\b/${basename}_yesterday/g' file.txt
但这也改变了
欧洲12-36
字符串。手动构造所需的分隔符列表,而不是使用\b
,\W
或\需要空格或行尾字符:
sed 's/Europe12\([ ]|$\)/Europe12_yesturday\1/g' input
您可以在2次内完成:
sed -e 's/Europe12/Europe12_yesturday/g' -e 's/Europe12_yesturday-36/Europe12-36/g' file.txt
[[:blank:]可以与您接受的任何边界一起完成,也可以是。,;:/)etc(在本例中保留该字符的regex含义)现在回复有点晚了。。
它可以通过“单词边界”符号(\)轻松实现
sed-i的/\/${basename}\u昨天/g'file.txt
sed 's/\(Europe12[[:blank:]]\)/\1_yesturday/g;s/Europe12$/&_yesturday/' YourFile
sed -i 's/\<$basename\>/${basename}_yesterday/g' file.txt