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

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

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2012/02/03 01:06:21
  • 終了:2012/02/10 01:10:07

ベストアンサー

id:JULY No.2

JULY回答回数966ベストアンサー獲得回数2472012/02/03 13:51:28

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

a-kuma3回答回数4606ベストアンサー獲得回数19432012/02/03 01:53:52

こんな感じです。

#! /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

JULY回答回数966ベストアンサー獲得回数2472012/02/03 13:51:28ここでベストアンサー

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

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

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

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません