2009-06-23 3 views

ответ

126

\ б в регулярных выражениях словоразделы совпадения (т.е. место между первым символом слова и без символа слова):

$ echo "bar embarassment" | sed "s/\bbar\b/no bar/g" 
no bar embarassment 
+0

отличное объяснение! – JohnTortugo

+6

ясно «Без помех». Умный пример текста;) – mtk

+3

[not posix] (http://sed.js.org/?gist=0d0377fffd0f8b21886ff288bc260423) | [GNU sed] (http://sed.js.org/?gist = 3c69aaff8facf8040a7c9556e80f0868) OK –

11

Использования \b для словоразделов:

sed -i 's/\boldtext\b/newtext/g' <file> 
+3

Будьте осторожны с '[]': 'o, l' ->' [newtext], [newtext] '. Вы, очевидно, имели в виду 'sed -i 's/\ boldtext \ b/newtext/g'' – JJoao

7

В одном моей машины, разделив слово на «\b» (без кавычек), не работает. Решение заключалось в том, чтобы использовать «\<» для начального разделителя и «\>» для конечного разделителя.

Для объяснения с примерами Joakim Lundberg «s:

$ echo "bar embarassment" | sed "s/\<bar\>/no bar/g" 
no bar embarassment 
-2
$ echo "bar embarassment"|awk '{for(o=1;o<=NF;o++)if($o=="bar")$o="no bar"}1' 
no bar embarassment 
+0

OP явно заявляет:« using sed » – ndemou

+0

Однако это хорошее решение. – fedorqui

+0

Это split-manipulate-join, а не чистая замена; это сворачивает несколько пробелов в один и отбрасывает любые ведущие/конечные пробелы: например. 'echo" барное смятие "| awk '{for (o = 1; o <= NF; o ++) if ($ o == "bar") $ o = "no bar"} 1' | cat -E' дает 'no bar embarassment $'. – musiphil

103

В Mac OS X, ни из этих регулярных выражений синтаксисах работы внутри СЭД для соответствующих целых слов

  • \bmyWord\b
  • \<myWord\>

выслушайте меня и поверьте мне позже, этот некрасиво синтаксис, что вам нужно использовать:

  • /[[:<:]]myWord[[:>:]]/

Так, например, для замены мяты с minty для всего слова:

  • sed "s/[[:<:]]mint[[:>:]]/minty/g"

Источник: re_format man page

+13

Просто установите GNU 'sed' (и любой другой инструмент GNU) через MacPorts или Homebrew и убедитесь, что он первый раз на вашем' PATH'. Можно сделать Mac довольно удобным. –

+6

@ JimStewart отличный способ разбить кучу инструментов, которые предполагают «когда на OS X, делать как OS Xers». Тем не менее, я могу определенно предложить 'brew install coreutils', который префиксы всех инструментов gnu. – ELLIOTTCABLE

+14

'brew install gnu-sed' использовать' gsed' – k107

1

в команде оболочки:

echo "bar embarassment" | sed "s/\bbar\b/no bar/g" 

или:

echo "bar embarassment" | sed "s/\<bar\>/no bar/g" 

, но если вы в Vim, вы можете использовать только позднее:

:% s/\<old\>/new/g 
Смежные вопросы