

⓵ `sed -e '$row_number,$d' $job_name`

任意のファイル（`$job_name`）に対して、任意の行数（`$row_number`）から最終行を  
削除したいと考えています。

変数として、下記を割り当てています。

`$row_number`  
`$job_name`

⓵の実行結果が望んだ様になりません。

調べた結果、どうも、`'$row_number,$d'`の部分に問題があるかと考えていますが、  
正解がわかりません。※変数の指定方法に問題があるのではないかと考えています。

あるサイトでは、「'」は不要と書かれていました。しかし、実行結果は、指定行は削除されませんでした。

教示頂きたいです。宜しくお願い致します。


CC BY-SA 3.0
2017-10-11T14:13:39.390
38606
2017-11-03T11:03:04.307
2017-10-12T05:50:09.210
754
22902
question
sed
sed での変数指定方法


`'` の位置を変えてみましょう。

[code]

    sed -e $row_number',$d' $job_name
    
[/code]

`$row_number` は shell によって解釈されるようになりますし、  
また、`$d` は `'` で囲まれているので shell によって解釈されません。

あと、上に挙げた方法だと、標準出力に結果が出力されます。もし `$job_name` に指定したファイルを書き換えたい、ということでしたら、`-i`
を付けるとできます。

[code]

    sed -i -e $row_number',$d' $job_name
    
[/code]

書き換えちゃうと元には戻りませんので、慎重にどうぞ。


CC BY-SA 3.0
2017-10-11T16:35:21.910
38612
2017-10-11T16:35:21.910
5288
38606
answer


こういう感じでしょうか？  
`-i`オプションの方がお好みでしたら書き換えてください。

[code]

    # sedでやるなら
    sed -e "$row_number~1d" <"$job_name"
    
    # headでもいいような
    head -n "${row_number:+$((row_number-1))}" "$job_name"
    # 単純化するなら
    head -n "$((row_number-1))" "$job_name"
    
[/code]


CC BY-SA 3.0
2017-11-03T11:03:04.307
39268
2017-11-03T11:03:04.307
25936
38606
answer