Antworten:
\ b in regulären Ausdrücken stimmen mit Wortgrenzen überein (dh der Position zwischen dem ersten Wortzeichen und dem Nichtwortzeichen):
$ echo "bar embarassment" | sed "s/\bbar\b/no bar/g"
no bar embarassment
\band\bden Tag zu retten :)
Unter Mac OS X funktioniert keine dieser Regex-Syntaxen in sed, um ganze Wörter abzugleichen
\bmyWord\b\<myWord\>Hören Sie mich jetzt und glauben Sie mir später, diese hässliche Syntax ist das, was Sie verwenden müssen:
/[[:<:]]myWord[[:>:]]/So zum Beispiel ersetzen Minze mit minzig für nur ganze Worte:
sed "s/[[:<:]]mint[[:>:]]/minty/g"Quelle: Manpage re_format
sed(und jedes andere GNU-Tool) über MacPorts oder Homebrew und stellen Sie sicher, dass es bei Ihnen an erster Stelle steht PATH. Es ist möglich, einen Mac ziemlich benutzerfreundlich zu machen.
brew install coreutils, welches alle Gnu-Tools vorangestellt hat.
brew install gnu-sedzu verwendengsed
perl -pe 's|\bone\b|two|g'. Funktioniert stabil, während sed hier und da versagt.
Verwendung \bfür Wortgrenzen:
sed -i 's/\boldtext\b/newtext/g' <file>
[]: o,l-> [newtext],[newtext]. Sie meinten offensichtlich sed -i 's/\boldtext\b/newtext/g'
In einer meiner Maschinen funktionierte das Abgrenzen des Wortes mit " \b" (ohne Anführungszeichen) nicht. Die Lösung bestand darin, " \<" zum Starten des Trennzeichens und " \>" zum Beenden des Trennzeichens zu verwenden.
Um es mit Joakim Lundbergs Beispiel zu erklären :
$ echo "bar embarassment" | sed "s/\<bar\>/no bar/g"
no bar embarassment
im Shell-Befehl:
echo "bar embarassment" | sed "s/\bbar\b/no bar/g"
oder:
echo "bar embarassment" | sed "s/\<bar\>/no bar/g"
aber wenn Sie in vim sind, können Sie nur das spätere verwenden:
:% s/\<old\>/new/g
$ echo "bar embarassment"|awk '{for(o=1;o<=NF;o++)if($o=="bar")$o="no bar"}1'
no bar embarassment
echo " bar embarassment " | awk '{for(o=1;o<=NF;o++)if($o=="bar")$o="no bar"}1' | cat -Egibt no bar embarassment$.