- - PR -
bshにて文字列操作
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-01-17 19:39
nakamuraと申します。
bシェルにてあるパラメータファイルを参照してその文字列のある部分を 取得したいのですが、ネット等で調べたのですがいまいちよくわかりません。 どなたかご教授願いますでしょうか。 test.shからパラメータファイルtest.datを読み込み、その中の特定の文字列を 取得したいと考えています。 パラメータファイル:test.dat test.datの中身 aaaaa/bbbbb /の前までのaaaaaを取得したいと考えています。 | ||||||||||||||||
|
投稿日時: 2007-01-17 19:47
¥と$は半角にして実行してください。
| ||||||||||||||||
|
投稿日時: 2007-01-17 19:59
こんにちは。
bash や ksh で良ければ、次のようなコードで。
詳しくは、bash(1)の「パラメータの展開」をご参照ください。 訂正: 申し訳ない。リダイレクトの“<”を2つ重ねてしまいました。それでは別の意味になってしまいますね。1つに訂正しました。 それと、while の後のセミコロンは無くても良いので消しました。 [ メッセージ編集済み 編集者: angel 編集日時 2007-01-18 09:18 ] | ||||||||||||||||
|
投稿日時: 2007-01-17 23:46
温州蜜柑さん、angelさんレスありがとうございます。
パラメータファイルからaaaaa/bbbbbは取得できたのですが、 配列等に1文字ずつセットし、最終的にaaaaaにしてっていうのは 効率悪いでしょうか。 angelさんに教えていただいたとおりやったのですが、これ以降のシェルの中身が表示されてしまいます。なにかおかしいでしょうか。 #!/bin/sh while read LINE; do echo ${LINE%%/*} done << test.dat echo "---------------------" >> test.log echo " shell end " >> test.log echo `date` >> test.log echo "---------------------" >> test.log 上記をtest.shに書いて、実行するとこれ以降のシェルの中身(echo4つ)が 表示されてしまいます。 温州蜜柑さんのでやってみたらうまくいきました。もうひとつ温州蜜柑さんに 教えていただきたいのですが、これで取得した文字列を変数に入れる場合は 普通に test=`cat test.dat | perl -pe 's/\//\t/g' | awk '{print $1}'` でよろしいのでしょうか? | ||||||||||||||||
|
投稿日時: 2007-01-18 00:43
いいと思いますよ。 それで $test に取得したい文字列が全て格納されるはずです。 でも
よりも
か
の方が良くないですか?^^; | ||||||||||||||||
|
投稿日時: 2007-01-18 01:39
これ、いいですね。勉強になりました。 やすけさん(nakamuraさんとお呼びすればいいのかな?)、こんばんは。 せっかくご指名いただきましたが、あいにく帰宅していました。 こっち( http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=36114&forum=10&3 )の 投稿もみましたが、以下のようなシェルで要件を満たせますか?
| ||||||||||||||||
|
投稿日時: 2007-01-18 09:10
おはようございます。
失礼しました。リダイレクトの書式がおかしかった分を、上で修正しました。 で、“test.dat”の中の、“/”以前の部分 (各行) の後に、指定のメッセージを添えて、“test.log”に保存する、というのであれば、次のようなスクリプトで。
| ||||||||||||||||
|
投稿日時: 2007-01-22 10:33
皆様、レスが遅れて申し訳ありません。やすけです。
追記ですが、このtest.datのパラメータファイルは複数行存在します。 なので、awk〜で取得すると、複数行すべて取得してしまうのです。 1行ずつ取得できないものでしょうか? |