Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix Sed仅替换精确匹配_Unix_Sed - Fatal编程技术网

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