私は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
マニュアルには次のように記載されていますが、
ディスク容量不足などの状況でコンテンツが破損したり部分的に発生する危険性があるため、ファイルを内部で編集するときに長さゼロの拡張子を指定しないことをお勧めします。