私はこれを持っています:
sed -i '/^$/d' temp_spec.rb
これは空の行を削除し、うまく機能します。 5-999行(またはファイルの終わりの5行)に対してのみこれを行うにはどうすればよいですか?
私は試した:
sed -n5,999 -i '/^$/d' temp_spec.rb
sed '5,999!d/^$/d' temp_spec.rb
ただし、どちらも機能しません(エラーなし)。
ベストアンサー1
5行目から始めてすべての空行を削除し、1行から4行を維持するには、次のようにします。
sed -i '5,${;/^$/d;}' temp_spec.rb
は{
グループ化演算子なので、最初のコマンドは「一致するまで5,${
5行目からinput()の終わりまで$
次のコマンドを実行します}
」を意味します。{
との間の命令には}
アドレスが前に付くこともあるので、内部命令は「/^$/d
行の先頭( )と終わり( )の間に何もなければ削除する」という意味です。 sedコマンドは区別できます。 (これはsedの正しく文書化されていない機能です。ほとんどのsed実装はこれをサポートしますが、^
$
;
完全にポータブルではない.) Haukeが指摘したように、;
後者{
はオプションですが、前者}
は必須です。
5行目から始まるすべての空行を削除し、1行から4行を削除するには、次の方が簡単です。
sed -i '1,4d;/^$/d' temp_spec.rb