sedが期待どおりに機能しない

sedが期待どおりに機能しない

この文字のすべてのインスタンスを置き換えるためにこのスクリプトを使用したいと思います。尋ねる"question.txt"ファイルの内容を含むファイル。代わりに何が起こるのかは、すべてのインスタンスが尋ねるファイルの内容は消え、「question.txt」の内容が新しいファイルの下部に印刷されます。

どんなアイデアがありますか?

sed -i.bkp '/Q/{
s/Q//g
r /Users/ericbrotto/Desktop/question.txt
}' Commision.txt 

編集1

どのバージョンがあるかを調べようとしていますが、このメッセージが表示され続けます。

ここに画像の説明を入力してください。

ベストアンサー1

理由を見つけたと思います。

ファイル名の後にスペースを入れると、後にスペースがあるファイル名が検索されます。次のように問題を再現できます。

源泉:

cat q.dat
Q
Not q
And Q again
And again not


cat kuh.dat 
Die dumme
Kuh

ファイル名 "kuh.dat" の操作例:

sed '/Q/{
s/Q//g
r kuh.dat
}' q.dat

Die dumme
Kuh
Not q
And  again
Die dumme
Kuh
And again not

「kuh.dat」を使った失敗した例があります。

sed '/Q/{
s/Q//g
r kuh.dat 
}' q.dat

Not q
And  again
And again not

ファイル名を引用せずにファイル名末尾の空白が認識されるのが私にとっては大きな驚きでした。そしてシェルでは見ることができず、長い間検索しましたが、成功しませんでした。これら2つの例の違いは何ですか?

おすすめ記事