「sed」がファイルの長さを拡張しないのはなぜですか? [閉鎖]

「sed」がファイルの長さを拡張しないのはなぜですか? [閉鎖]

次の行を含むファイルが提供されます。

 1. 1
 2. 2
 3. 3
 4. 4
 5. 5

「sed」コマンドを実行します。

sed -i "/4/a\text\" filename.txt

ファイルは次のようになります。

 1. 1
 2. 2
 3. 3
 4. text
 5. 4

今、「5」を表す行が消えました。

ファイルの行数が変更されていないかのように、最後の行が遅れているようです。

私が実行したコマンドは、「所定の位置に挿入」を意味する「-i」フラグを使用しませんでした。

sed "/3/a\text\" filename.txt > temp.txt; mv temp.txt filename.txt;

ただし、「in-place」フラグが指定されていない場合でも、同じ効果が表示されます。これが'sedの意図された機能ですか?行を追加する方法はありますか?

答え1

テキスト行を追加するには、簡単な引用符を使用できます。

例:

[root@h2g2w ~]# sed -i '/4/a\text\' toto    
[root@h2g2w ~]# cat toto                    
1                                           
2
3
4
text
5
[root@h2g2w ~]#

これもうまくいきます...使用しているsedのバージョンはGnuのバージョンですか?二重引用符も機能します(ただし、ここで使用するのはユーザーエラーです)。

[root@h2g2w ~]# sed -i "/4/a\text\ " toto
[root@h2g2w ~]# cat toto
1
2
3
4
text
text
5
[root@h2g2w ~]#

答え2

まず、公開したコマンドをシェルに直接挿入すると、構文の問題が発生する可能性があります。

第二に、提供された2つのコマンドは最終的にsedまたは他のコマンドを介して元のファイル「filename.txt」を直接変更します。

お分かりのように、最初の例では、sedに「-i」スイッチを使用してファイルを直接変更するようにします。 2番目の例では、「filename.txt」をコマンドで上書きしますmv temp.txt filename.txt

したがって、両方の例で予想される結果を見ることができます。

はい、sedを使用して行を挿入できます。

https://stackoverflow.com/questions/6537490/insert-a-line-at-special-line-number-with-sed-or-awk

関連情報