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

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

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

答え2

テキストの順序が正しい場合は、\<cat\>交換する必要があります。しかし、私の考えは<cat>これだけを試していると思います:

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

一重引用符は、それらの間の文字が解釈されるのを防ぎます。

答え3

-iファイルを編集するには、sedの後に追加する必要があります。たとえば、次のようになります。

sed -i 's/cat/dog/g' tt.txt

完全に機能する必要があります。

関連情報