Мне нужно заменить несколько слов другими словами.
Например, «яблоко» с «ФРУКТАМИ» в file
, только в следующих 4 ситуациях:
_apple_
, имеет пробел до и после.
[apple_
, имеет квадратную открывающую скобку до и пробел после.
_apple]
, имеет пробел до и квадратную скобку после.
[apple]
, имеет квадратные скобки до и после.
Я не хочу, чтобы замены происходили в любой другой ситуации.
Я пытался использовать следующий код:
a="apple"
b="fruit"
sed -i "s/ $a / $b /g" ./file
sed -i "s/\[$a /\[$b /g" ./file
sed -i "s/ $a\]/ $b\]/g" ./file
sed -i "s/\[$a\]/\[$b\]/g" ./file
Я думал, что опция "g" в конце будет означать, что она заменит все экземпляры, но я обнаружил, что это не полное решение Например, если file
содержит это:
apple spider apple apple spider tree apple tree
Третье вхождение «яблоко» не заменяется. Также при этом несколько появлений слова не изменились:
apple spider apple apple apple apple apple spider tree apple tree
Я подозреваю, что это потому, что общее "пространство".
Как я могу получить это, чтобы найти и заменить все экземпляры $a
на $b
, независимо от совпадения?