Как искать и заменять целые слова с помощью sed?sed целое слово поиск и замена
Ведение
sed -i 's/[oldtext]/[newtext]/g' <file>
также заменит частичные матчи [oldtext]
, которые я не хочу это делать.
Как искать и заменять целые слова с помощью sed?sed целое слово поиск и замена
Ведение
sed -i 's/[oldtext]/[newtext]/g' <file>
также заменит частичные матчи [oldtext]
, которые я не хочу это делать.
\ б в регулярных выражениях словоразделы совпадения (т.е. место между первым символом слова и без символа слова):
$ echo "bar embarassment" | sed "s/\bbar\b/no bar/g"
no bar embarassment
Использования \b
для словоразделов:
sed -i 's/\boldtext\b/newtext/g' <file>
Будьте осторожны с '[]': 'o, l' ->' [newtext], [newtext] '. Вы, очевидно, имели в виду 'sed -i 's/\ boldtext \ b/newtext/g'' – JJoao
В одном моей машины, разделив слово на «\b
» (без кавычек), не работает. Решение заключалось в том, чтобы использовать «\<
» для начального разделителя и «\>
» для конечного разделителя.
Для объяснения с примерами Joakim Lundberg «s:
$ echo "bar embarassment" | sed "s/\<bar\>/no bar/g"
no bar embarassment
$ echo "bar embarassment"|awk '{for(o=1;o<=NF;o++)if($o=="bar")$o="no bar"}1'
no bar embarassment
OP явно заявляет:« using sed » – ndemou
Однако это хорошее решение. – fedorqui
Это split-manipulate-join, а не чистая замена; это сворачивает несколько пробелов в один и отбрасывает любые ведущие/конечные пробелы: например. 'echo" барное смятие "| awk '{for (o = 1; o <= NF; o ++) if ($ o == "bar") $ o = "no bar"} 1' | cat -E' дает 'no bar embarassment $'. – musiphil
В Mac OS X, ни из этих регулярных выражений синтаксисах работы внутри СЭД для соответствующих целых слов
\bmyWord\b
\<myWord\>
выслушайте меня и поверьте мне позже, этот некрасиво синтаксис, что вам нужно использовать:
/[[:<:]]myWord[[:>:]]/
Так, например, для замены мяты с minty для всего слова:
sed "s/[[:<:]]mint[[:>:]]/minty/g"
Источник: re_format man page
Просто установите GNU 'sed' (и любой другой инструмент GNU) через MacPorts или Homebrew и убедитесь, что он первый раз на вашем' PATH'. Можно сделать Mac довольно удобным. –
@ JimStewart отличный способ разбить кучу инструментов, которые предполагают «когда на OS X, делать как OS Xers». Тем не менее, я могу определенно предложить 'brew install coreutils', который префиксы всех инструментов gnu. – ELLIOTTCABLE
'brew install gnu-sed' использовать' gsed' – k107
в команде оболочки:
echo "bar embarassment" | sed "s/\bbar\b/no bar/g"
или:
echo "bar embarassment" | sed "s/\<bar\>/no bar/g"
, но если вы в Vim, вы можете использовать только позднее:
:% s/\<old\>/new/g
отличное объяснение! – JohnTortugo
ясно «Без помех». Умный пример текста;) – mtk
[not posix] (http://sed.js.org/?gist=0d0377fffd0f8b21886ff288bc260423) | [GNU sed] (http://sed.js.org/?gist = 3c69aaff8facf8040a7c9556e80f0868) OK –