- ベストアンサー
UNIX sedの使い方
教えてください。 UNIX のSed コマンドについてです。 [内容] テキストの中身を一行ずつ表示し、一行ずつ書き込みをしたい。 [ソース] #!/bin/sh i=1 while [ "$i" -le 10 ] do sed -n '${i}p' list.txt >> data.txt <--ここのsedの行数指定('${i}p')の使い方がわかりません。 i=`expr $i + 1` done 何方かご存知の方教えてくださいませ。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。お返事遅れましてすみません。 >一行ずつ読み込んだデータに対して、外部コマンドの実行をしたいのですが、出来るのでしょうか? sed スクリプトから外部コマンドは呼ぶことはできませんが、 全体をシェルスクリプトとして記述し、sed のコマンド列(-e の後に書くもの) を組み立てるやり方ならできるでしょう。 >ファイル.sedの中身 >p{ <-- ここで一行読み。 > <-- 読み込んだ一行をここで、コマンドをたたい >て、そのデータを変更する。 ><-- テキストに追加書き込み出力 >} {...}のようなブロックは行や正規表現によるアドレス指定の後に使うもので、 p に続けて使うことはできません。 本当にやりたいことを具体的な例で挙げて頂ければ。 なお、パターンスペースの内容をファイルに書き出すのは コマンドラインのリダイレクト以外に「w」コマンドでもできます。
その他の回答 (1)
- nightowl
- ベストアンサー率44% (490/1101)
こんばんは。まず確認したいのですが、学校の課題か何かでは ないのでしょうね? sed ならそれ自体の機能でこれと同じことができますよ。 それから、このスクリプトはそのままではうまく走りません。 文法上のミスと意味上のミス([内容]の記述が正しければ)の 両方があります。Linux や FreeBSD が触れてすぐに確かめられる 環境ならすぐに見つかるはずです。
補足
ありがとうございます。 いろいろ試してみて、sedについて追加でご質問なのですが、一行ずつ読み込んだデータに対して、外部コマンドの実行をしたいのですが、出来るのでしょうか? たとえば、sed -f ファイル.sed ファイル名.txt ファイル.sedの中身 p{ <-- ここで一行読み。 <-- 読み込んだ一行をここで、コマンドをたたいて、そのデータを変更する。 <-- テキストに追加書き込み出力 } sedではここまでの処理はできないのでしょうか? それとも使い方が間違っているのでしょうか?