sed ワード境界、macOS

sed ワード境界、macOS

私はmacOSを使用しており、次のsedコマンドを使用して特定の単語を見つけて別の単語に置き換えようとしていますが、何の変更もありません。問題は何ですか?

sed 's/\<cat\>/dog/g' tt.txt

ベストアンサー1

sed[[:<:]]代わりに使用\<してmacOSで[[:>:]]置き換えてください\>。また、macOSの実装はワード境界モードをsedサポートしていません。 macOSのドキュメントに記載されてい\bますが、sed(1)re_format(7)する\<\>およびを参照してください\b

ファイル自体は変更されません。

sed 's/[[:<:]]cat[[:>:]]/dog/g' tt.txt

起こる唯一のことは、sedファイルを読み取り、各入力行に式を適用することです。その後、変換されたデータを標準出力に書き込みます。

出力を新しいファイルに保存するには、次のようにします。

sed 's/[[:<:]]cat[[:>:]]/dog/g' tt.txt >tt.txt-new

その後、元のファイルを新しいデータに置き換えることができます。

sed 's/[[:<:]]cat[[:>:]]/dog/g' tt.txt >tt.txt-new && mv tt.txt-new tt.txt

macOSでは、次のコマンドを使用して内部変換を実行することもできます。

sed -i '' 's/[[:<:]]cat[[:>:]]/dog/g' tt.txt

マニュアルには次のように記載されていますが、

ディスク容量不足などの状況でコンテンツが破損したり部分的に発生する危険性があるため、ファイルを内部で編集するときに長さゼロの拡張子を指定しないことをお勧めします。

おすすめ記事