あるファイルの特定行を削除するLinuxのシェルスクリプトを作りたいです。

通常ならば
sed -i '行数d' ファイル名
だと思いますが、行数が変数(例えばA=10)の場合はどのように記述するのでしょうか。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2012/02/10 01:10:07

ベストアンサー

id:JULY No.2

回答回数966ベストアンサー獲得回数247

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

#!/bin/sh

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

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

./test.sh 10 inputfile

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

id:Barogu

回答ありがとうございます。
入力ファイルをそのまま上書きできる点がいいですね!

2012/02/13 00:10:01

その他の回答1件)

id:a-kuma3 No.1

回答回数4974ベストアンサー獲得回数2154

こんな感じです。

#! /usr/bin/sh

input_file=...
output_file=...

delete_line=10      # 削除対象の行

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

mv $output_file $input_file


  • sed のコマンドをダブルクォートでくくる
  • ${} で、対象行を変数展開する
id:Barogu

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

2012/02/13 00:07:45
id:a-kuma3

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

2012/02/13 00:12:40
id:JULY No.2

回答回数966ベストアンサー獲得回数247ここでベストアンサー

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

#!/bin/sh

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

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

./test.sh 10 inputfile

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

id:Barogu

回答ありがとうございます。
入力ファイルをそのまま上書きできる点がいいですね!

2012/02/13 00:10:01

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません