Sed:全局替换--如何在某一行中忽略特定范围的位置。

问题描述 投票:0回答:1

我想做一个globel替换,将 字符串 "苹果 "到 "香蕉 "的出现次数。除了 对于 第二 "苹果 "的出现在第214行。第二次出现的 "apple "的行位是13到17。

例如,第214行现在是这样的。

apple.pineapplejuice();

我想把这一行改成("pineapplejuice() "中的 "apple "没有改变)。

banana.pineapplejuice();

一些使用实例 apple 在我的其他文件中

SetupTable(apple, {isWashed, okay});

我试着在这些帖子中寻找答案,但找不到我需要的东西。sed 从选定的文本中替换第8位的空格字符。 如何使用 sed 和 cut 在文件中的某一行的某一位置找到并替换数值。

我已经尝试过的代码。

sed -i -e '214\{13,17\}!s/apple/banana/g' src/test/fruit.cpp

我得到了

sed: 1: "214\{13,17\}!s/apple/ba ...": invalid command code \

我想我只需要知道如何指定某一行特定范围的字符的地址就可以了,但也许还有其他比这更巧妙的方法。先谢谢你

regex search sed
1个回答
1
投票

sed 是一种(图灵完整)脚本语言。你可以写条件。

sed '
   214{
      # line 214 handled spexially
      s/apple/banana/
   }
   214!{
      # all except line 214
      s/apple/banana/g
   }
'

或者你可以 '214{s/apple/banana;b;}; s/apple/banana/g' 如果找到214行,就跳到脚本的开头。

我相信你只是想使用GNU sed扩展,并匹配单词 apple:

sed 's/\<apple\>/banana/g'

0
投票

在GNU sed中,将 apple 整词

sed -i 's/\bapple\b/banana/g' file

\b 是一个词的边界。

© www.soinside.com 2019 - 2024. All rights reserved.