次の行を含むファイルが提供されます。
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