gpt4 book ai didi

bash - 使用 sed 更改匹配后的第一次出现

转载 作者:行者123 更新时间:2023-12-05 08:57:27 27 4
gpt4 key购买 nike

我已经计算出在匹配后替换 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”字符串。但它不仅会取代那个,还会取代所有后续的。

最佳答案

sed -e '/#NOTE/!b' -e ':a' -e "s/$NEW_VVER/$CURRENT_VER/;t trail" -e 'n;ba' -e ':trail' -e 'n;btrail' FILE1 > FILE2
  • posix 兼容和 oneliner(将所有 ' -e ' 替换为多行脚本的新行(还有 " 并替换周围的 '通过 " 进行变量解释 )
  • 更改 #NOTE 之后第一次出现的 NEW_VVER 但不在同一行(假设 #note 是注释行)。 Linne 可能排在 #NOTE
  • 之后第 50 位
  • 假设 NEW_VVERCURRENT_VER 的内容符合正则表达式(转义元字符,如 &)

关于bash - 使用 sed 更改匹配后的第一次出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32382922/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com