68user's page 掲示板

Prev< No. 4921〜5021> Next  [最新発言に戻る] [過去ログ一覧]
No. 4921 # zsh 2008/07/09 (水) 10:09:43
>>4919 べた
expr や cut でもできますよ。
(cut の場合は @ が付きませんが。)

$ expr $email : '\(.*\)@.*'
$ expr $email : '.*\(@.*\)$'
$ echo $email | cut -d '@' -f 1
$ echo $email | cut -d '@' -f 2

>>4918 べた
Solaris には標準で /usr/local というディレクトリがないので、
68user さんの仰るとおりだと思います。

No. 4923 # べた 2008/07/10 (木) 22:27:06
>>4921 zsh
ありがとうございます。

exprやcutでの使い方ありがとうございます。
勉強になります。

No. 4924 # べた 2008/07/10 (木) 22:28:12
WindowsXP IE6.0 SP2 の別の端末から書き込みを
おこなったら以下のエラー画面が表示されました。

何かインストールされていないものがあるのでしょうか。


エラー : 内部エラーが起こりました。
http://x68000.q-e-d.net/%7E68user/cgi-bin/wwwboard.cgi の実行ができませんで
した。
おそらくCGIプログラムの不具合が原因です。

もし、こちらのファイル設定ミス・リンクミス・CGI の不具合などが原因であった場
合は早急に修正します。

の画面が表示されます。

No. 4925 # べた 2008/07/10 (木) 22:36:19
>>4918 べた
>>4921 zsh

説明ありがとうございます。

それでなのですが、ステータスが返ってくるということで、
「/usr/local/bin/iconv」を使っています。
Bシェルで実行しています。
iconvコマンドをパイプでつないで、連続で実行しています。

/usr/local/bin/iconv -f SJIS -t UTF-8 file_sjis.txt | /usr/local/bin/iconv -f UTF-8 -t UTF-16 > file_utf.txt

1回目のiconv(パイプの左側のiconv)がエラーとなったとき、
ステータスがエラーで返ってきません。
エラーを判断したいのですが、どのようにしたらエラーと判断
できるでしょうか。

/usr/local/bin/iconv -f SJIS -t UTF8 file_sjis.txt | /usr/local/bin/iconv -f UTF-8 -t UTF-16 > file_utf.txt
echo $?

iconv: conversion to UTF8 unsupported
0

”0”が返却。

/usr/local/bin/iconv -f SJIS -t UTF-8 file_sjis.txt | /usr/local/bin/iconv -f UTF-8 -t UTF16 > file_utf.txt
echo $?

iconv: conversion to UTF16 unsupported
1

”1”が返却。

No. 4926 # べた 2008/07/12 (土) 01:29:32
>>4923 べた

ありがとうございます。

$ expr $email : '\(.*\)@.*'
$ expr $email : '.*\(@.*\)$'
$ echo $email | cut -d '@' -f 1
$ echo $email | cut -d '@' -f 2

どれでも、取り出せました。

No. 4927 # 68user 2008/07/20 (日) 03:21:17
>>4925 べた
> 1回目のiconv(パイプの左側のiconv)がエラーとなったとき、
> ステータスがエラーで返ってきません。
> エラーを判断したいのですが、どのようにしたらエラーと判断
> できるでしょうか。
bash なら PIPESTATUS を使えばよいですが、sh であれば
終了ステータスは取得できないと思います。しょぼいですが、
パイプを使うのをやめるのがよいかと思います。

>>4924 べた
> WindowsXP IE6.0 SP2 の別の端末から書き込みを
> おこなったら以下のエラー画面が表示されました。
IP アドレスや発言内容などから SPAM と判定されたのかもしれません。
特に判定精度の高いものではないので、頻発するようならご連絡ください。

No. 4928 # べた 2008/07/22 (火) 21:53:41
>>4927 68user

ありがとうございます。
sh できないんですね。
出力結果がなければ、出力結果をパイプで渡さなければ
「&&」でいけるのでないかと覆いますが。

パイプを使わず個々に行います。

No. 4929 # べた 2008/07/30 (水) 00:39:04
Solaris8 なのですが、「/var/log/syslog」に、
TCPコネクションのログを出力させたいのです。
telnet、ftpなど、接続したログを出力したいの
です。
どのようにすればよいのでしょうか。

「/etc/syslog.conf」には、以下の様な記述をしています。

user.notice /var/log/syslog

syslogのデーモンも再起動したのですが、出力されません。

No. 4931 # バンガード [E-mail] 2008/08/05 (火) 10:01:38
>>4829 68user
ftpのログを取得するAIXの場合の例です。

#vi /etc/inetd.conf
(ftpのエントリーで最後に「-l」または「-d」オプションを追加)

ftp .... /usr/sbin/ftpd ftpd -l
または ftpd -d
(転送ファイル名を確認するだけであれば -l オプションの方がログが少なくて済みます)

#refresh -s inetd
(inetdデーモンをリフレッシュ)

#vi /etc/syslog.conf
(syslog設定ファイルにftpのログを取得するためのエントリを追加)

daemon.info /tmp/ftpd.log
(daemon.debugであればもう少し詳しい詳細が確認できます)

#touch /tmp/ftpd.log
(ログファイルを作成)

#refresh -s syslogd
(syslogデーモンを再起動)

No. 4932 # バンガード [E-mail] 2008/08/05 (火) 10:02:46
>>4931 バンガード
ごめんなさい。
4929へのコメントでした。

No. 4933 # べた 2008/08/19 (火) 21:25:01
>>4932 バンガード
お礼が遅れ申し訳ありません。
ご説明ありがとうございます。

どちらにしてもデーモンの再起動(リフレッシュ)が
必要なんですね。

No. 4934 # べた 2008/08/19 (火) 21:28:29
Solaris8 なのですが、シェルを実行する際、
./シェル名としないと起動できません。

「./」で起動するにはどうしたらよいのでしょうか。

「./」で起動できるアカウントがあるので、違いを比べてみると
PATHの変数が異なっていました。

PATH=./:/usr/bin・・・・・
とか
PATH=・・・・/usr/bin:

PATH変数の中に、「./」の設定がある。
PATH変数が「:」で終わっている。

「./」を指定しないと動かないアカウントは、両方がない状況と
なっています。
どのように環境変数を設定すればよいのですか。

No. 4935 # zsh 2008/08/20 (水) 12:07:16
>>4934 べた
> 「./」で起動するにはどうしたらよいのでしょうか。
「./」なしで起動したいということでしょうか?
PATH 環境変数に ./ を含めれば可能ですが、お勧めはしません。
特定のディレクトリにスクリプトを集めて、そのディレクトリを
PATH 環境変数に含める方がよいと思います。

なお、同じ名前のコマンド(スクリプト)が複数のディレクトリに
存在する場合は、PATH 環境変数で先に見つかったコマンド
(左側のパスから順番に探しに行きます)が実行されます。

No. 4936 # 68user 2008/08/21 (木) 02:14:31
>>4934 べた
PATH に . を含めない理由は以下のとおり。

・セキュリティホールとなる。PATH=.:/bin:/usr/bin:/usr/local/bin となっていて、
    cd ~foo; ls としたときに /home/foo/ls が存在したら、そのプログラムを実行
    してしまう。cd /tmp; ls も同様。そのプログラムがどんな悪さをするかはわからない。

・PATH に . を加えると、カレントディレクトリによって実行されるコマンドが異なる
    可能性があるため、説明がめんどくさいし、はまりやすくなる。例えば /bin と
    /usr/bin に同名のコマンドがあるとして、コマンド foo をタイプしたときに、
        - カレントディレクトリが /usr/bin の場合は /usr/bin/foo が実行される
        - カレントディレクトリが /usr/bin 以外の場合は /bin/foo が実行される
    というのはわかりづらい。

・csh・tcsh・bash・zsh など、今どきなシェルを使っている場合は、
        ./
    からタイプした方がファイル名補完を使えるため、入力が速い。

No. 4941 # べた 2008/08/26 (火) 22:00:32
>> 4935
>> 4936

返事が遅くなってすみません。

分かり易く説明ありがとうございます。
勉強になります。

No. 4942 # べた 2008/10/08 (水) 20:36:52
Cシェルでのリダイレクションについてなのですが

コマンドの実行結果で、標準エラー出力を捨てて、標準出力
だけを見たいのですがどうすればよいのですか。

cat file.txt >& /dev/null
では、標準出力、標準エラー共に捨てられますが、
標準エラーを捨てて、標準出力を表示したい。

cat file.txt 2 >& /dev/null
cat file.txt >2& /dev/null
cat file.txt >& 2 /dev/null
cat file.txt > /dev/tty >2 /dev/null
cat file.txt > /dev/tty >& /dev/null

とやってみたのですが、どれも上手くいきません。

どうすればよいのでしょうか。

環境は、
Solaris8 Cシェル
です。

No. 4943 # 68user 2008/10/08 (水) 22:16:55
>>4942 べた
tty 宛でよいなら、サブシェルを使って
    ( cat file.txt > /dev/tty ) >& /dev/null
です。

No. 4944 # べた 2008/10/09 (木) 20:49:11
>> 4944

ありがとうございます。

> tty 宛でよいなら、サブシェルを使って
> ( cat file.txt > /dev/tty ) >& /dev/null
> です。
出来ました。

tty 宛でよいなら、サブシェルを使って
tty を使わない方法もあるのですか。あるのでした教えてください。
サブシェルとは。
「( command )」とはどのよな使い方でしょうか。

良い案が思い浮かばなかったので、「cat file.txt > /dev/tty」で
表示ができたので、 /dev/tty を使えば上手くできるのではないかと。

No. 4945 # 68user 2008/10/10 (金) 10:06:19
>>4944 べた
tty を使わないなら、
    ( cat file.txt > out.txt ) >& /dev/null
などとファイルに保存する。

あるいは mknod や mkfifo で名前付きパイプを作ってそこに
流すなど (さすがに標準エラー出力を捨てるためにここまで
やるのはバカバカしいですが)。
    mkfifo out
    cat out &
    ( cat file.txt > out ) >& /dev/null

あるいは
    sh -c "ls cat file.txt 2>/dev/null"
などと sh で逃げる手もあります。

csh でやるなら、これ以外の方法はおそらくないです。

> サブシェルとは。
> 「( command )」とはどのよな使い方でしょうか。
こちらをどうぞ。
    http://x68000.q-e-d.net/~68user/unix/pickup?%A5%B5%A5%D6%A5%B7%A5%A7%A5%EB

No. 4946 # べた 2008/10/10 (金) 20:24:28
>> 4945

ご説明ありがとうございます。

Windows XPの別端末で書き込みをしたら
「エラー : 内部エラーが起こりました。」
の画面が表示されました。
何かあるのでしょうか。

No. 4947 # 素人 2008/12/11 (木) 14:52:56
こんにちは.linuxを使い始めたものです.
パイプに関する質問です.環境はVine Linux のbashです.

あるファイル名(ここではtestfile)のものを検索して,
さらにその中身に"test"という文字列を含むかどうかを
知りたいと思っています.
対象のファイルがひとつとは限りません.例えば,
...........
../Data1/testfile ⇒(中身)This is test file.
...........
../Data2/testfile ⇒ (中身) This is hoge hoge.
といった感じで同じ名前のファイルが別のディレクトリにあります.

cat,find, grepを組み合わせれば出来そうな気はしているのですが,
findしてリスト表示されたファイル名を引数としてcatコマンドに
渡すことができません.

自分なりにいろいろ検索しましたが,よくわかりませんでした..
よろしくご教授ください.

No. 4948 # 68user 2008/12/11 (木) 17:17:18
>>4947 素人
親ディレクトリ以下の testfile というファイル名のファイル中に
test という文字列があるものをリストアップ、であれば
    % find ../ -name testfile | xargs grep -l test
でしょうか。それを cat するなら
    % find ../ -name testfile | xargs grep -l test | xargs cat
ですかね。

No. 4949 # 素人 2008/12/11 (木) 18:35:48
>>4948 68user
できました!答えはxargsでしたか.
勉強不足で恐縮です.ありがとうございました.

No. 4950 # 佐藤丈師 [E-mail] 2008/12/12 (金) 17:03:36
RSA1のプログラムを実行するにあったってエラーが多くでます。これのヘッダファイルはどこにあるのでしょうか。

No. 4951 # 68user 2008/12/23 (火) 17:49:12
>>4950 佐藤丈師
OpenSSL に同梱されていますので、OpenSSL をインストール済みであれば
/usr/include/openssl や /usr/local/openssl/include などにあるはずです。
コンパイル時に -I /usr/include/openssl などのオプションを付加してください。

No. 4952 # kawasaki 2009/01/13 (火) 18:11:06
初めて投稿します。
全くの初心者ですが、次のことをお尋ねします。
Debian4.0ですが、デスクトップにアイコンを作成し、クリックすると
プログラムを起動するようにしたいのですがどのようにすればいいの
でしょうか。

#su - abc ’abcでログインし、「sh /usr/lib/scripts/claim/ORC_CLAIM_SERVER.sh 5001 /var/tmp」

ktermに記述などお尋ねします。

No. 4953 # 68user 2009/01/14 (水) 02:02:57
>>4952 kawasaki
やり方はインストールしたデスクトップ環境 (GNOME とか KDE とか) によると思います。

が、お使いのデスクトップ環境をお教えいただいたとしても、ここ数年は UNIX 系
デスクトップ環境をいじっていないので、わたしはさっぱりわかりません。

No. 4954 # uccこーひー 2009/01/18 (日) 15:47:46
初めまして。
ちょっと気になったので言わせて下さい。

UNIXの部屋 コマンド検索: Machでの説明で、

発音は、普通なら [まっは] が正しいと思うが、アメリカ人は "ch" の発音ができないらしくて
  [まーく] [まっく] といっている (発音できないような名前を付けるなと言いたい)。

とありますが、発音できないんじゃなくて、そういうスペルだと、
英語的には、マークって呼ぶだけです。hの2つ前は、aつまりエイって発音し、
cは、基本的には、ックって発音になり、
何も考えずにつなげて読むと、マークって読みます。

で、でもなんで、マッハが正しいかと言うと、
これは、ヨーロッパ系の言語の多くが、
machって書いてまっはって読むからです。
発音できないわけじゃないですよ^^;

No. 4955 # 68user 2009/01/28 (水) 02:30:07
>>4954 uccこーひー
ご指摘ありがとうございます。が、正直なところを申しますと、学がないので
真偽のほどが判断できません。よって、該当コンテンツより、
>>4954 uccこーひー
の発言にリンクを張らせていただきますので、あとはお読みいただいた方に
ご判断いただくことでご了承ください。

No. 4957 # たけ 2009/02/10 (火) 13:43:32
いつも便利に参照しています。
lsコマンドの紹介ページ(http://x68000.q-e-d.net/~68user/unix/pickup?ls)
「man Solaris10 ls(1)」のリンク先が間違えているのに気がついたのでご連絡です。
正しくは、
http://docs.sun.com/app/docs/doc/819-1210/ls-1?l=ja&a=view&q=ls」かな?

No. 4958 # 68user 2009/02/13 (金) 00:15:02
>>4957 たけ
> 「man Solaris10 ls(1)」のリンク先が間違えているのに気がついたのでご連絡です。
ありがとうございます。Sun のページはたまに URL が変わるんですよね…。
最新情報で更新しておきました。

NetBSD の manpage へのリンクも表示されなくなっていますが、そのうち直します。

No. 4960 # 谷口 功 [E-mail] 2009/02/27 (金) 18:25:50
SE募集の件で書き込みさせていただきました。
大変興味がありますので、一度詳細を教えていただけないでしょうか。
ご連絡をお待ちしています。

No. 4961 # 68user 2009/02/28 (土) 00:14:30
ありがとうございます。メールを送ります。

No. 4974 # べた 2009/03/19 (木) 19:53:35
Perlで、前日のAM9時以降に作成されたファイルを
取得したいのですが、どのようにPerlを書けばよい
のでしょうか。

Perlのシェルスクリプトを起動する前日のAM9以降
から、実行日までの間に作成されたファイルを取得
したいのです。

実行日の前日の9時というのは以下の方法で取得できる
のですが、取得した日付とファイル作成日付を比較し、
対象か否かを判断して、必要なものだけを取得する
方法が分かりません。
どのよに書けばよいのでしょうか。


「実行日の前日の9時」は、
--------------------------------
#!/usr/local/bin/perl

$tm = time - (24 * 60 * 60 * 1);
($sec, $min, $hour, $day, $mon, $year) = (localtime($tm))[0..5];
$now = sprintf("%04d/%02d/%02d %02d:%02d:%02d",$year+1900,$mon+1,$day,$hour,$min,$sec);
print $now, "\n";

--------------------------------
#!/usr/local/bin/perl

use POSIX 'strftime';

$tm = time - (24 * 60 * 60 * 1);
my $now = strftime "%Y/%m/%d %H:%M:%S", localtime($tm);
print $now, "\n";

No. 4975 # べた 2009/03/19 (木) 19:57:17
>> 4974

環境を書き忘れました。

環境は、
    Solaris8
    Perl v5.8.5

No. 4976 # 68user 2009/03/21 (土) 00:36:01
>>4974 べた
>>4975 べた
Solaris なら適当なファイルを作って、touch コマンドでタイムスタンプを
前日 08:59:59 にしておいて、find . -newer foo とするのが一番簡単かと
思います。

FreeBSD なら find -mtime -99h とか、Linux なら find -mmin -9999 とか
できますが (99 や 9999 は計算して求める)、結局は -newer の方が簡単な
気がします。

モジュール使うなら
    File::Find
        http://perldoc.perl.org/File/Find.html
    File::Find::Rule
        http://search.cpan.org/~rclamp/File-Find-Rule-0.28/lib/File/Find/Rule.pm
あたりかと思いますが、いずれも前日9時と比較する部分は手で書かないと
いけないように見えますので、イマイチですね。

No. 4977 # べた 2009/03/22 (日) 23:25:34
>>4976 68user

ありがとうございます。
また、返事が遅くなって申し訳ありません。

> find . -newer foo
ですか。
シェルで、findの結果を取得することも考えました。

> あたりかと思いますが、いずれも前日9時と比較する部分は手で書かないと
> いけないように見えますので、イマイチですね。
Perlを使おうとしていたので、手で書かなくてはいけないと思っていました
この部分の良い方法が実現できなくて。

環境上、教えて頂いたモジュールも入れることができません。

No. 4978 # 68user 2009/03/23 (月) 22:00:19
>>4977 べた
find . -newer foo の方法を書いておきます。find を使わないなら、
昨日9時の日時 (20090323090000) を Time::Local で epoch time に
直しておき、stat() が返す最終更新時刻と比較すればよいでしょう。

------
my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time()-60*60*24);
my $timestamp = sprintf("%04d%02d%02d%02d%02d.%02d", $year+1900, $mon+1, $mday, 9, 0, 0);
my $yeasterday_9am_file = "foo.txt";
system("touch -t $timestamp $yeasterday_9am_file");
open(IN, "find . -type f -newer $yeasterday_9am_file |");
while (<IN>){
        chomp;
        print "$_\n";
}

No. 4979 # べた 2009/03/24 (火) 21:19:39
>> 4978

ありがとうございます。

教えていただいた方法ですと、前日9時のタイムスタンプの
取得をPerlでやればあとは、シェルスクリプトでもできます
ね。

実のところ、findを使わない、Perlでの記述、遣り方を教えて
ほしいのですが。

No. 4980 # べた 2009/03/25 (水) 09:16:00
>>4978 68user

> find を使わないなら、
> 昨日9時の日時 (20090323090000) を Time::Local で epoch time に
> 直しておき、stat() が返す最終更新時刻と比較すればよいでしょう。

Time::Local で epoch time に直しての「epoch time」とは
なんでしょうか。

No. 4982 # ちびヴァル [URL] [E-mail] 2009/04/05 (日) 23:19:53
linuxのCでグラフィックの勉強がしたくてX-Windowまで辿り着いたのはよかったんですが、
ここ↓のソースを実行させようとしても何故かエラーが出てしまいます。
http://x68000.q-e-d.net/~68user/xprogram/xlib-4.html

一応類似の記事がないかどうか調べて見ましたが、
No.8552が近いと思いましたが全然分かりませんでした。
ちゃんとusr/include/X11ファイルに
Xlib.hとXutil.hはありますし、
コンパイルオプションも活用してみました……
Xlib.hとXutil.hの意味も分からなくて困窮中です……

コマンドラインは、gcc -o xlib-4-1 xlib-4-1.c -I /usr/include/X11 -L /usr/include/X11
エラーは以下の文です
/tmp/cc2pF4g1.o: In function `main':
xlib-4-1.c:(.text+0x9f): undefined reference to `XOpenDisplay'
xlib-4-1.c:(.text+0x149): undefined reference to `XCreateSimpleWindow'
xlib-4-1.c:(.text+0x198): undefined reference to `XSetStandardProperties'
xlib-4-1.c:(.text+0x1c0): undefined reference to `XCreateGC'
xlib-4-1.c:(.text+0x1e8): undefined reference to `XSetBackground'
xlib-4-1.c:(.text+0x20a): undefined reference to `XSetForeground'
xlib-4-1.c:(.text+0x232): undefined reference to `XCreateGC'
xlib-4-1.c:(.text+0x25a): undefined reference to `XSetBackground'
xlib-4-1.c:(.text+0x27c): undefined reference to `XSetForeground'
xlib-4-1.c:(.text+0x294): undefined reference to `XMapRaised'
xlib-4-1.c:(.text+0x2ec): undefined reference to `XFillArc'
xlib-4-1.c:(.text+0x344): undefined reference to `XFillArc'
xlib-4-1.c:(.text+0x352): undefined reference to `XFlush'
collect2: ld はステータス 1 で終了しました

No. 4983 # 68user 2009/04/06 (月) 11:36:31
>>4982 ちびヴァル
オプション -lX11 が足りていません。まずは
    http://x68000.q-e-d.net/~68user/xprogram/xlib-1.html
からどうぞ。

No. 4984 # 68user 2009/04/06 (月) 11:37:59
>>4980 べた
> 「epoch time」とはなんでしょうか。
http://oku.edu.mie-u.ac.jp/~okumura/php/date.php
    UNIX で Epoch とは,協定世界時(UTC,いわゆるグリニッジ標準時 GMT)
    1970 年元旦 0 時 0 分のことです。 UNIX の内部ではこの瞬間からの秒数で
    時刻を表しています。
のことです。

No. 4985 # ちびヴァル [URL] [E-mail] 2009/04/06 (月) 14:46:01
>>4983 68user

一通り実行して終了させると次の文章が出るんですが……
XIO: fatal IO error 11 (Resource temporarily unavailable) on X server ":0.0"
            after 16 requests (14 known processed) with 0 events remaining.

自分で調べて、etc/X11/xorg.confというファイルにが重要であると
わかったので、xorg.confに
Section "ServerFlags" Option "AllowEmptyInput" "off" EndSectionを
追加しようとしていますが、普通のテキストエディタでは
「そのファイルを保存するために必要な権限がありません。入力した場所が正しいか確認して、もう一度実行してみて下さい。」
と出て保存出来ないのですが、どうすればいいでしょうか?
また、コマンドプロンプトでも試して見ましたが、
E325: ATTENTION
Found a swap file by the name "/etc/X11/.xorg.conf.swp"
                    owned by: root dated: Mon Apr 6 14:37:03 2009
                  file name: /etc/X11/xorg.conf
                    modified: YES
                  user name: root host name: mikan
                process ID: 8021
While opening file "/etc/X11/xorg.conf"
                          dated: Thu Mar 5 23:15:04 2009

(1) Another program may be editing the same file.
        If this is the case, be careful not to end up with two
        different instances of the same file when making changes.
        Quit, or continue with caution.

(2) An edit session for this file crashed.
        If this is the case, use ":recover" or "vim -r /etc/X11/xorg.conf"
        to recover the changes (see ":help recovery").
        If you did this already, delete the swap file "/etc/X11/.xorg.conf.swp"
        to avoid this message.
"/etc/X11/xorg.conf" 33 lines, 1037 characters
と出てどうすればいいか迷っています

No. 4986 # 68user 2009/04/07 (火) 23:39:02
>>4985 ちびヴァル
> Found a swap file by the name "/etc/X11/.xorg.conf.swp"
vim が作成したスワップファイルでしょうから、.xorg.conf.swp を
削除して、root 権限で xorg.conf を更新すればよいと思います。

No. 4988 # べた 2009/04/11 (土) 14:29:40
>> 4978

> find . -newer foo の方法を書いておきます。find を使わないなら、
> 昨日9時の日時 (20090323090000) を Time::Local で epoch time に
> 直しておき、stat() が返す最終更新時刻と比較すればよいでしょう

の方法を教えて欲しいのですが。

No. 4989 # べた 2009/04/21 (火) 20:16:51
Bシェルで、sedを使って、フルパスからディレクトリとファイル名を
分割したいのですが良い方法を教えてください。

ファイル名を取り出すことは出来たのですが、パス名を取り出すこと
ができません。
また、ルート直下「/txt.csv」のような場合だと、ファイル名が取り出せ
ません。結果が、「/txt.csv」となってしまいます。「txt.csv」と
したいのです。


------------------------------------
FILE=/aaa/bbb/txt.csv
echo ${FILE} | sed 's/\/.*\///g'

FILE=/txt.csv
echo ${FILE} | sed 's/\/.*\///g'

FILE=txt.csv
echo ${FILE} | sed 's/\/.*\///g'


環境は、
    Solaris8
    Bシェル

No. 4990 # 68user 2009/04/22 (水) 03:06:48
>>4989 べた
basename・dirname コマンドを使うのはダメですかね。

No. 4991 # べた 2009/04/22 (水) 08:52:24
>>4990 68user

>basename・dirname コマンドを使うのはダメですかね。
も考えましたが、
出来れば、使わない方法でと

No. 4992 # zsh 2009/04/22 (水) 11:56:48
>>4991 べた
普通に考えると、それ専用のコマンドがあるんだからそれを使うべき。

sed でやりたいならこんな感じかなぁ?
- ファイル名
echo ${FILE} | sed 's/.*\///g'
- パス名
echo ${FILE} | sed 's/\(.*\/\)[\/]*/\1/g'

No. 4993 # べた 2009/04/22 (水) 12:12:04
>>4992 zsh

> 普通に考えると、それ専用のコマンドがあるんだからそれを使うべき。
すみません。

> - パス名
> echo ${FILE} | sed 's/\(.*\/\)[\/]*/\1/g'
が、上手くいきませんでした。
パス名がとれません。フルパスが返ってきます。

/aaa/bbb/txt.csv → /aaa/bbb/txt.csv
/txt.csv → /txt.csv

No. 4994 # べた 2009/04/22 (水) 12:15:00
>>4992 zsh

> 普通に考えると、それ専用のコマンドがあるんだからそれを使うべき。
すみません。

> - パス名
> echo ${FILE} | sed 's/\(.*\/\)[\/]*/\1/g'
が、上手くいきませんでした。
パス名がとれません。フルパスが返ってきます。
それと、ファイル名のみ場合は、値がなしとしたいのですが。

/aaa/bbb/txt.csv → /aaa/bbb/txt.csv
/txt.csv → /txt.csv

No. 4996 # zsh 2009/04/22 (水) 17:14:30
>>4994 べた
失礼しました。↓でどうでしょうか?

echo ${FILE} | sed -n -e 's#\(.*\)/[^/]*#\1#p'

No. 4997 # べた 2009/04/22 (水) 19:10:04
>>4996 zsh
ありがとうございます。
パス名を取り出すことができました。
ただ、以下の様に場合、上手くいきません。

「FILE=/txt.csv」の場合
    「/」となりません。
    ブランクというか、改行します。
    「/」だけ取り出すというのは無理なのでしょうか。

「FILE=txt.csv」の場合
    ブランクとなります。
    正しい動きなのでしょうか。

No. 4998 # ふくし 2009/04/22 (水) 22:39:27
nawkのユーザ定義関数について教えて下さい。

nawkで、ユーザ定義関数を呼び出して編集を行っているのですが、
ユーザ定義関数内で編集した値を、パラメータで渡した変数に設定
して返却したいのでが値が返却されません。
ユーザ定義関数内では、渡した変数に値が設定されているのですが、
関数を抜けると値が設定されていません。
どうしてなのでしょうか。
それとも、無理なのでしょうか。
パラメータで渡した変数に設定して返すことができるのでしょうか。

環境
    OS:Solairs8
    シェル:Bシェル(sh)

--------------------------------------------------------------
nawk -v OUT=${OutFile} -F"," '
        BEGIN {
                count = 0+0;
        }
        function chk2(arg1,arg2,val) {
                sub(/^"*/,"",arg1); sub(/"*$/,"",arg1);
                sub(/^"*/,"",arg2); sub(/"*$/,"",arg2);
                val=sprintf("%s %s",arg1,arg2);
        }
        function chk1(arg1,val) {
                sub(/^"*/,"",arg1); sub(/"*$/,"",arg1); val=arg1;
        }
        {
                chk1($1,UserID);
                chk2($8,$9,Name);

                printf("%s,%s\n",UserID,Name);
                #printf("%s,%s\n",UserID,Name) >> OUT;
                count++;
        }
        END {
                printf("Output number : %d\n",count);
}' ${FILE}

No. 4999 # zsh 2009/04/23 (木) 11:23:01
>>4997 べた
> 「FILE=/txt.csv」の場合
パス名末尾の / を出力しないようにしていたためですね。

echo ${FILE} | sed -n -e 's#\(.*/\)[^/]*#\1#p'

こうすれば出力されると思いますが、
逆に /hoge/fuga.txt のような場合でも /hoge/ となります。

> 「FILE=txt.csv」の場合
パスが指定されていないので、ブランクで正しいと思っていますが。
(そういった条件もありませんでしたし。)

>>4998 ふくし
nawk は参照渡しできないはずなので、そういう書き方ではできません。
ただ nawk では、ユーザ関数の引数として定義された変数を除き、
すべてグローバル変数だと思うので、やろうとしていることはできます。

No. 5000 # べた 2009/04/23 (木) 13:10:32
>>4997 べた

ありがとうございました。
出力されました。

No. 5001 # べた 2009/04/23 (木) 13:19:29
>>4999 zsh

お礼先誤りですみません。
ありがとうございます。


>> 「FILE=txt.csv」の場合
> パスが指定されていないので、ブランクで正しいと思っていますが。
> (そういった条件もありませんでしたし。)

No. 4994で、自分でファイル名のみの場合、値なしとしたいと
書いておきながら正しい動きなんですかと質問すみませんで
した。

No. 5002 # sfish 2009/04/23 (木) 14:46:19
>>4998 ふくし

えっ、Solairs8 の nawk って return を使えないんでしょうか?

No. 5003 # zsh 2009/04/23 (木) 15:58:34
>>5002 sfish
man には
return [expr]
と記載があったので、リターンコードを返すものだと思っていましたが、
確かに値を返すことも出来ました。こっちの方がいいですね。

No. 5004 # ふくし 2009/04/23 (木) 21:06:27
>>4999 zsh

> ただ nawk では、ユーザ関数の引数として定義された変数を除き、
> すべてグローバル変数だと思うので、やろうとしていることはできます。
どういうことでしょか。
nakwで関数を作るのが不慣れなもので、

nawk内で定義した変数はグローバル変数なので、nawk内であれば、
ユーザ定義関数でも参照や書き換えができるということでしょうか。
また、
ユーザ定義関数ないで定義した変数は、関数内でしか有効とならない
ということでしょうか。
例などを載せてくれるとありがたいのですが。

No. 5005 # zsh 2009/04/27 (月) 17:13:54
>>5004 ふくし
> nawk内で定義した変数はグローバル変数なので、nawk内であれば、
> ユーザ定義関数でも参照や書き換えができるということでしょうか。

その通りです。

ただ、
>>5002 sfish
で return で値が戻せることを教えて頂いたので
関数側は、
---------------------------------
function chk1(arg1) {
        sub(/^"*/,"",arg1); sub(/"*$/,"",arg1);
        return arg1;
}
---------------------------------
のようにして、呼び出し側は
---------------------------------
UserID = chk1($1);
---------------------------------
とすれば、やろうとしていることができると思います。

No. 5006 # まえ [E-mail] 2009/04/28 (火) 09:07:23
初歩的な質問ですが

内蔵HDDを増設し「label:Backup」として、クリックしますと「sdb」と表示されています。
プロパティで、場所は/mntとなっています。

このHDDに mv /home/ormaster/123.txt sdb/123.txt とファイルの移動をしたいのですが方法を教えてください。

No. 5007 # ふくし 2009/04/28 (火) 12:01:40
>>5005 zsh

ありがとうございます。

No. 5008 # 山田洋子 [E-mail] 2009/04/28 (火) 21:29:44
エラーメッセージ「cannot execute binary 」についての質問。

以前にservice sendmail start 2<&1 | /bin/mail -s "件名" wenbi@akw.com.cn
というコマンドを実行して、正常です。

しかし、下記のコマンドを実行して、「cannot execute binary 」というエラーメッセージを出ました。
この後、上記のコマンドを実行しても、エラーを出ます。
service sendmail start infile.txt
iconv -f EUC-JP -t Shift_JIS infile.txt < infile2.txt
cat infile2.txt | /bin/mail -s "件名" wenbi@akw.com.cn

No. 5009 # 68user 2009/05/07 (木) 13:40:49
>>5006 まえ
mount 済みであれば、mv /home/ormaster/123.txt /mnt/123.txt で
いけるのではないかと思います。

>>5008 山田洋子
よくわかりませんが、cannot execute binary のエラーメッセージを
出力しているのが service コマンドなのか、iconv コマンドなのか、
cat や mail なのかを調べてみてはどうでしょうか。

No. 5010 # ふくし 2009/05/23 (土) 00:01:56
nawkでsystem関数で、コマンドを実行しています。
今、system関数で実行したコマンドの結果を変数
に格納したいのですが、結果のステータスが格納
されて、コマンドの実行結果が格納できません。
どうしてなのでしょうか。そもそも不可能なのでしょうか。

system関数で、dateコマンドを実行し、結果を変数に
格納して、nawk内で使用したいのです。

nawk '{system("date +%Y%m%d")}'

環境は、
Solaris8
bsh
です。

No. 5011 # 68user 2009/05/23 (土) 01:06:30
>>5010 ふくし
system は単なるコマンドの実行であり、コマンドの標準出力を受け取るような
仕組みになっていません。この場合は getline を使うべきかと思います。

No. 5013 # ふくし 2009/05/23 (土) 10:59:31
>>5011 68user

ありがとうございます。
上手くいきました。

No. 5017 # keiji [E-mail] 2009/05/27 (水) 15:07:21
完全ガイドwindowsxp基本+Q&A 2008,3,20
p275,Q057 
1・アイコンの数を増やすは、あるが、減らす方法が、無い。

2・初心者に解かるように、教えて。やり方がわからへん。

No. 5018 # keiji 2009/05/27 (水) 15:14:43
特定のアイコンを消す方法です。

No. 5020 # たろう 2009/06/21 (日) 03:05:55
はじめまして

ネットワークプログラミングのページは
とってもためになりました。

・読みやすい
・わかりやすい
・内容がある

すばらしいです。

少なくとも私の嗜好とあうはず。
なので、
おすすめ書籍を紹介してください!

・実践的にアプリケーションを作る
・複数ファイルのビルドを説明
・winコンポーネント
・プロセス間通信
・管理人さんのように読みやすく、わかる、内容がある
・ネットワークアプリ(サーバー、メーラーetc)
・c言語、perl、php(windows

いま、プロキシサーバと、メールサーバに興味があるので、
それが作れるような本。(あくまでわかりやすく言ってます)
ぜひ、よろしくお願いします。

No. 5021 # 68user 2009/07/04 (土) 15:59:26
>>5020 たろう
すべての要求を満たす本はニッチすぎて存在しないと思います。
特にサーバはニーズがあまりなく、深く掘り下げるほど単なる
RFC の解説になってしまうため、書籍としては成立しづらいのかも
しれません。

とはいえ、いくつか提示してみます。

○UNIXネットワークプログラミング入門
        http://www.amazon.co.jp/-/dp/4774117544

    この本は持っていませんが、前身である
        UNIXネットワーク・ベストプログラミング入門
            http://www.amazon.co.jp/-/dp/4874085032
    は持っています。書評は
        http://x68000.q-e-d.net/~68user/net/link-book.html
    に書いてあります。

○Perlネットワークプログラミング―ソケットの使い方から
    クライアント/サーバーシステムの開発まで
        http://www.amazon.co.jp/-/dp/4894714655

    買っていませんが、目次を見ると結構範囲は広いようです
    (700ページもあるから当然か…)。深く突っ込んでいるかは
    わかりません。

○基礎からわかるTCP/IP ネットワーク実験プログラミング
        http://www.amazon.co.jp/-/dp/4274065847

    アプリレイヤではなく TCP/IP 寄りですが、結構おもしろいことを
    やっていて勉強になります。読みやすいかというと、個人的には
    ちょっとつらいです (一枚の複雑な図があって、それを長い文章で
    解説するのは無理がある。まぁ書籍だから仕方ないかもしれませんが)


あとは、いずれも持っていませんが、
    オンラインゲームプログラミング
        http://www.amazon.co.jp/-/dp/4797328479

    MMORPGゲームサーバープログラミング
        http://www.amazon.co.jp/-/dp/4797328460
といったアプローチもアリかもしれません。

Prev< No. 4921〜5021> Next  [最新発言に戻る] [過去ログ一覧]