人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

あるファイルの特定行を削除するLinuxのシェルスクリプトを作りたいです。
通常ならば
sed -i '行数d' ファイル名
だと思いますが、行数が変数(例えばA=10)の場合はどのように記述するのでしょうか。

●質問者: Barogu
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● a-kuma3

こんな感じです。

#! /usr/bin/sh

input_file=...
output_file=...

delete_line=10  # 削除対象の行

sed -e "${delete_line}d" $input_file > $output_file

mv $output_file $input_file



Baroguさんのコメント
ご回答ありがとうございます。 ドルマークを抜いたdelete_lineだけを括弧でくくるのですね!

a-kuma3さんのコメント
変数の展開は、中括弧でくくらなくても解釈できることは多いのですが、 中括弧でくくる癖をつけておくと、変なことで悩まなくて済みます。

2 ● JULY
ベストアンサー

sed の代わりに、ラインエディタの ed を使うと、入力ファイルをそのまま上書きできます。

#!/bin/sh

echo -e "$1d\\nw" | ed - $2

何行目を削除するか、と、入力ファイル名をコマンドラインから受け取るようにしました。上記スクリプトを test.sh というファイル名にして実行権を与えれば、

./test.sh 10 inputfile

で、inputfile という名前の 10 行目を削除して上書きします。


Baroguさんのコメント
回答ありがとうございます。 入力ファイルをそのまま上書きできる点がいいですね!
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ