【发布时间】:2015-09-04 14:04:14
【问题描述】:
我已经制定了在匹配后替换 sed 的语法,但它会替换匹配后的所有实例。有人可以告诉我我在这里做错了什么。我知道这是小事,但我似乎无法接受。
sed -e "0,/\#NOTE/! s/$NEW_VVER/$CURRENT_VER/" FILE1 > FILE2
我也试过了
sed -e "0,/\#NOTE/! s/$NEW_VVER/$CURRENT_VER/1" FILE1 > FILE2
这是完整的 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"
基本上它应该找到字符串“#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
###########################################
例如,它应该找到字符串“#NOTE”并将“REPVVER”字符串替换为新值。但它不仅会取代那个,而且会取代所有后续。
【问题讨论】:
-
请显示示例数据(例如 3-10 行输入)和示例输出。为
NEW_VVER和CURRENT_VER显示合适的值可能会有所帮助。双V是故意的吗?如果是的话也没问题;如果不是,那将是一个大问题。 -
请在您的问题中添加示例输入和该示例输入所需的输出。
-
是的,双 V 是有意的 这是它应该改变的
#NOTE: Don't forget to add the needed variables to the version arguments. DEFAULT_VERSION = REPVVER它应该只改变 REPVVER 的实例,但它会改变 REPVVER 的所有实例 -
请注意,
0作为地址范围的下限是 GNU 扩展。 -
那么要替换的字符串与
#NOTE出现在同一行,还是在下一行?