我已经制定了在sed匹配后替换的语法,但它替换了匹配后的所有实例。有人可以告诉我我在这里做错了什么。我知道这是小事,但我似乎无法接受。
sed -e "0,/\#NOTE/! s/$NEW_VVER/$CURRENT_VER/" FILE1 > FILE2
Run Code Online (Sandbox Code Playgroud)
我也试过
sed -e "0,/\#NOTE/! s/$NEW_VVER/$CURRENT_VER/1" FILE1 > FILE2
Run Code Online (Sandbox Code Playgroud)
这是带有 sed 命令和要更改的数据的完整行。
sed -e "0,/\#NOTE/! s/$NEW_VVER/$CURRENT_VER/" -e "0,/\#NOTE/! s/$NEW_VER/$VER/" -e "0,/\#NOTE/! s/$EVEN_LENGTH/$OLD_EVEN_LENGTH/" -e "0,/\#NOTE/! s/$ODD_LENGTH/$OLD_ODD_LENGTH/" -e "0,/\#NOTE/! s/$START_DIGIT/$OLD_START_DIGIT/" -e "0,/\#NOTE/! s/$STRING/$OLD_STRING/ FILE1 > FILE2"
Run Code Online (Sandbox Code Playgroud)
基本上它应该找到字符串“#NOTE”并只替换匹配后的第一个实例。
#CHANGE THESE EVERY VERSION
#NOTE: Don't forget to add the needed variables to the version arguments.
DEFAULT_VERSION = REPVVER
EVEN_LENGTH = REPELENGTH
ODD_LENGTH = REPOLENGTH
CURR_VERSION = "REPVVER"
START_DIGIT = REPSTARTDIGIT
###########################################
Run Code Online (Sandbox Code Playgroud)
例如,它应该找到字符串“#NOTE”并用新值替换“REPVVER”字符串。但它不仅会取代那个,而且会取代所有后续。