[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 02/26 17:47 / Filesize : 258 KB / Number-of Response : 1020
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

シェルスクリプト総合 その25



1 名前:名無しさん@お腹いっぱい。 mailto:sageteoff [2015/08/14(金) 23:42:01.51 .net]
シェルスクリプトの総合スレです。
□お約束
・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。
 bash/zsh/ksh/ashなどに依存する場合は明示しましょう。
 Linuxユーザは/bin/shの正体がbashまたはdashなので特に注意。
 FreeBSDユーザは/bin/shの正体がashなので注意。
 v7 shに一番近くて、現役のshは、OpenSolaris由来のheirloom sh。
  src.illumos.org/source/xref/illumos-gate/usr/src/cmd/sh/
  heirloom.sourceforge.net/sh.html
・csh/tcshのシェルスクリプトは推奨されません。
 (理由は「csh-whynot」でググれ)
・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。
 manや参考リンクを見ましょう。
 aproposないしはman -kでそれらしい単語による簡単な検索もできます。
・シェルで使えるワイルドカード等は正規表現ではありません。
 正規表現の話題はスレ違い(正規表現スレへ)
・シェルスクリプトのことをシェルってゆーな
□初心者へのアドバイス:
・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
 awkまたはperlの方が適した処理にはそちらを使いましょう。
・知らないコマンドが出てきたらmanを引きましょう。
・思い通りに動かないときは、まずは sh -x でトレースしましょう。
□回答者への注意事項:
・シェルスクリプトでの処理方法を質問しているのに、よくわからずに
 「そういうのはperl使いましょう」と回答するのはやめましょう。
 安易にperlに逃げずにシェルスクリプトで処理するのが頭のいいやり方。
前スレ
シェルスクリプト総合 その24
peace.2ch.net/test/read.cgi/unix/1415634843/

680 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/06/15(水) 14:54:39.46 .net]
眼科行けよ・・・

681 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/06/15(水) 14:58:10.28 .net]
日常生活の夜景にKDEを妄想する病気か。
IT土方の後遺症

682 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/06/15(水) 17:06:08.30 .net]
>>665
おお、これはシンプルですね
空ファイルでもちゃんと対応できています
man見てもそんな動作するとは明示されてないのですが
安定した仕様と考えていいのでしょうか

683 名前:名無しさん@お腹いっぱい。 [2016/06/15(水) 19:20:41.67 .net]
$ <- 最終行
a <- add. 置換ならsが有名. pでprint
\ 何もない シェルスクリプトでも改行またぐときに使うやつ

類似した構文
seq 20 | head
seq 20 | sed -n '1,10p'

684 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/06/15(水) 21:22:12.46 .net]
それだったら

seq 20 | sed 10q

の方が良いかもしんない

685 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/06/16(木) 01:11:19.56 .net]
>>652
stackoverflow.com/questions/10082204/add-a-newline-only-if-it-doesnt-exist
awk
{ rm file;awk 1 >file; }<file

bash
[[ $(tail -c1 file) && -f file ]]&&echo ''>>file

686 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/06/16(木) 14:28:12.81 .net]
>>673
おお、awkは明白でわかりやすいですね
改行抜きで読んだ各行を改行付きでprintするわけですね
その意味ではawkで完璧なcatはできないのかな
紹介していただいたページには他にもいろいろ解法があっておもしろいです
ありがとうございます

687 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/06/16(木) 15:35:18.42 .net]
grep + moreutils の sponge

$ grep '' file | sponge file

688 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/06/16(木) 19:35:59.66 .net]
>>675
grepだけでも末尾に改行つけるんですね
でもこの仕様も安定性が心配



689 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/06/16(木) 20:54:54.26 .net]
コマンドラインから翻訳API使ってるがおもしろすぎるw

690 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/06/19(日) 12:33:57.95 .net]
Windows7上でCygwinを動かしbashスクリプトを記述しています。

特定のタスクが起動するのを監視して、起動を確認したら行動に移すスクリプトを
書こうと思っています。

たとえばWindows Media Playerを起動するとWindowsタスクマネージャー上の
「アプリケーション」タブに"Windows Media Player"が立ち上がるのが分かります。

このように特定のタスク/アプリケーションの起動を検知するスクリプトをbashで
記述するにはどうしたらよろしいでしょうか?

691 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/06/19(日) 14:28:17.66 .net]
ps -W | grep "Windows Media Player" | grep -v grep

692 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/06/19(日) 14:30:25.15 .net]
"Windows Media Player"の部分は実際のexeになると思うから
ps -Wで表示されるのにしてね

693 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/06/19(日) 15:43:42.63 .net]
>>679
>>680
ありがとうございますm(_ _)m

694 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/06/20(月) 18:07:32.11 .net]
そういう時は pgrep を使えよ! と思って手元の Cygwin (64bit) に procps-ng を
インストールしてみたんだけど、これって cygwin 配下のプロセスしか見えないのね……

695 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/06/20(月) 23:14:14.04 .net]
大変出遅れたけど
>>649
の問題はbashなんだしshopt -s nullglobで済むのでは?

696 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/06/21(火) 02:08:19.29 .net]
横からだけど、bash なら nullglob でいけるな〜
むっちゃ参考になった。ありがとう

697 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/07/03(日) 14:58:46.31 .net]
OSXのsedメモ

ダメ
echo "12

698 名前:3.abcd" | sed -e 's!\.[a-zA-Z]{2}!!g'
echo "123.abcd" | sed -e 's!\.[a-zA-Z]{2,3}!!g'
echo "123.abcd" | sed -e 's!\.[a-zA-Z]+!!g'
echo "123.abcd" | sed -e 's!\.[a-zA-Z]?!!g'
OK
echo "123.abcd" | sed -e 's!\.[a-zA-Z]*!!g'

OK
echo "123.abcd" | sed -e 's!\.[a-zA-Z]\{2\}!!g'
echo "123.abcd" | sed -e 's!\.[a-zA-Z]\{2,3\}!!g'
ダメ
echo "123.abcd" | sed -e 's!\.[a-zA-Z]\+!!g'
echo "123.abcd" | sed -e 's!\.[a-zA-Z]\?!!g'

OK
echo "123.abcd" | sed -e 's!\(\.[a-zA-Z]\{2\}\)!z!g'
echo "123.abcd" | sed -e 's!\(\.[a-zA-Z]\{2,3\}\)!z!g'

+と?の代わりになるいい方法ないですか?
[]
[ここ壊れてます]



699 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/07/03(日) 15:23:02.40 .net]
-e じゃなくて -E つかうとか?

700 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/07/03(日) 15:27:38.26 .net]
$ echo "123.abcd" | sed -Ee 's!\.[a-zA-Z]+!!g'
123
$ echo "123.abcd" | sed -Ee 's!\.[a-zA-Z]?!!g'
123bcd

701 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/07/03(日) 15:33:05.72 .net]
あ、そうか -E は代わりじゃなくて -Ee とすべきだね

702 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/07/03(日) 15:35:22.62 .net]
-Eの存在をすっかり忘れてた
ありがとう

703 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/07/03(日) 15:52:51.46 .net]
OSXにする人への注意点
デフォのままだと、'、"、-が自動的に置換されるから、環境設定>キーボード>ユーザ辞書で自動置換をoffにしたほうがいい
appごと?、ファイルごと?でもメニューバー>編集>自動置換でも自動置換をoffにできる

704 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/07/03(日) 20:21:24.00 .net]
>>690
OSX歴10年ほどだけど、そんなんの知らんかったし、
そんな目にあったことがない。ぐぐったら実在する機能らしいが、
テキストエディットでコーディングするなんて考えられないし、
あたかもすべからく機能するように誤解を誘導するのはよくない。
OSXを使い始めて困ったのは、円とバックスラッシュを区別することぐらいだ。

705 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/07/04(月) 20:49:46.74 .net]
注意点でそんな攻撃的にならなくても
そのテキストエディットのデフォ値を晒した方が有益かと

706 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/07/04(月) 21:44:12.04 .net]
マカーのレスって 〜 が、おかしいよね。
デフォルトでおかしいのが出ちゃうのか知らんけど、あれをなんとかしてほしい

707 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/07/05(火) 02:10:41.78 .net]
ゴシックなのに明朝っぽくなるやつね

自分も知ってるけど一発でマック使いだって分かるから
あのままでいいと思ってる

708 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/07/05(火) 02:24:03.69 .net]
波ダッシュの話?
あれは Windows XP がしくっただけじゃなかったっけ。
Unicode の仕様含め結構まとめてくれてる人がいるから一度読んでみたらいい。



709 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/07/05(火) 09:28:26.99 .net]
アポが勝手なことをしただけ

710 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/07/05(火) 11:46:58.78 .net]
>>696
どうぞ
internet.watch.impress.co.jp/docs/special/691658.html
internet.watch.impress.co.jp/img/iw/docs/691/658/fig_2_s.jpg

711 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/07/05(火) 14:27:46.64 .net]
それより、UFT8-macを何とかしてほしい。
日本語ファイル名だとLinuxマシンとまともに連携が取れない。

712 名前:名無しさん@お腹いっぱい。 [2016/07/05(火) 15:14:05.40 .net]
>>697
お前はまとめ見て引用しか出来ない馬鹿だな
そのリンク先にも書いてあるだろ
Unicodeのイメージ(字形)が間違ってたんだよ
XPはその仕様を忠実に実装しただけであって
アポは無視したんだよ
MSもヴィスタから同じ対応をしただけだ

知ったかぶりするんじゃねーよ

713 名前:名無しさん@お腹いっぱい。 [2016/07/06(水) 12:51:14.80 .net]
おい、おまえら!

Unixの読み方はユニ(ッ)クスだぞ。Linuxの読み方はリナ(ッ)クスだぞ。

ちなみにASUSはエイサスな、日本語よみでユニックスとかリナックスとかアスースとか読むのは知能が低い証拠だぞ。

Xの前は何でも「ッ」をつければいいと思ってるのは、典型的な日本人のレベルだぞ!

ちなみに、Xの前に正々堂々と「ッ」をつけてもいいのは、貴様らにほとんど関係ない

セ○クス(S○X)だけだぞ!

714 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/07/06(水) 17:47:32.09 .net]
むかしYahooをヤッホーって言ってた友達を思い出した

715 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/07/06(水) 19:07:35.87 .net]
イット革命の時代には、よくあることだね

716 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/07/06(水) 20:49:19.53 .net]
伏せたらSIXだかSOXだかわかんねえな。

717 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/07/06(水) 21:36:34.09 .net]
アメリカで働いてたときはごちゃまぜだった
方言によって訛りもあるし正直通じればなんでもいい

718 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/07/07(木) 18:04:30.74 .net]
最初は現地読みで「りぬくす」または英語読みで「らいなっくす」と言われてた



719 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/07/12(火) 21:25:52.98 .net]
塩味のマムコ

720 名前:名無しさん@お腹いっぱい。 [2016/07/12(火) 23:15:08.76 .net]
ちんぽ

721 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/07/14(木) 00:29:39.15 .net]
イスドンvsアドスル

722 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/07/19(火) 06:19:56.96 .net]
aliasの設定で

alias command='echo "hage"'

commandにスペースを含ませる事できないのでしょうか?

723 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/07/19(火) 08:59:57.76 .net]
>>709
bashだよね。普通にできる

724 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/07/19(火) 09:07:33.10 .net]
あ。command を "c o m m a n d" にしたいということなら
bashの識別子の条件に反するので不可

725 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/07/19(火) 19:42:55.37 .net]
>>710
710=711 と仮定して質問するけど、710はどういう場合? 何を勘違いしたかが気になって。

726 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/07/19(火) 21:28:50.34 .net]
>>712
710=711だけど、aliasで別名を定義するコマンド(つまりイコールの右側)に
スペースを入れられるのかという質問だと考えた。例示がそういう形になってるから。

もし、alias名にスペースを入れられるかという質問ならそういう例示をするはず
でも後者の質問という可能性に気づいたので、711を追加した

727 名前:名無しさん@お腹いっぱい。 [2016/07/22(金) 22:58:42.81 .net]
<bashのfunctionをdeclare -fで表示すると整形してあることを利用>

d.hatena.ne.jp/n9d/20090117/1232182669

ほとんどなんもしてないワンライナーだけど、見事にスクリプト
ファイル整形してくれる。なんか感動すたw

728 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/08/06(土) 14:00:53.40 .net]
Windows10のISOをダウンロードするときに考えたんだけど
URLからファイル名だけを抜き出すこれより冴えたやり方ってある?
ちなみにWindows10のISOはISOファイルの後ろに
セッションIDかなにかがクエリで付くんだな

cat download.txt | grep -v ^$ | grep -v ^# | while read url
do
file=`echo "$url" | sed "s/.*\///g" | sed "s/\?.*//g"`

if [ $file == "" ]
then
echo file is null "$url"
continue
fi

ps -ef | grep wget | grep "$file"
if [ $? -eq 0 ]
then
echo download now "$file"
else
wget -c -t 1000 -O "work/$file" "$url"
fi
done

一応、ファイル名を正しく取得するのと
重複ダウンロード防止機能付き

wget -cにしたのは中断後の再開がもったいないし
wget -cで2重起動するとファイルが壊れて
いやな思いをした経験があるのでチェック入れてます



729 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/08/07(日) 00:22:16.73 .net]
basenameじゃ駄目なの?

730 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/08/07(日) 11:38:22.64 .net]
上のif文、$fileを""で囲わなくていいの?
実際引っかかることはなさそうだけど

731 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/08/08(月) 22:34:42.13 .net]
bash の変数内の文字列削除ってどうやるのでしょうか?削除したいのは"(ダブルクォート)なんですが
testvar=aaa"aa"
${testvar##\"}

これじゃ駄目だった

732 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/08/08(月) 23:41:17.18 .net]
>>718
## は前方最長一致
全部

733 名前:置換するのは //

testvar='aaa"aa"'
echo ${testvar//\"}

Bashマニュアル「パラメータの展開」セクション内「パターンの置換」
http://linuxjm.osdn.jp/html/GNU_bash/man1/bash.1.html#lbBB
[]
[ここ壊れてます]

734 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/08/10(水) 12:59:48.57 .net]
selectはbash専用ですか?

735 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/08/11(木) 00:06:31.61 .net]
>>720
はい
https://wiki.ubuntu.com/DashAsBinSh#select
https://github.com/koalaman/shellcheck/wiki/SC2039#select-loops

736 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/08/16(火) 04:34:02.37 .net]
特定のディレクトリ配下のファイルの中身に特定の文字列が含まれるかどうかを判定するにはどうしたらいいですか?

find xargs grep?これの行数でも数えてtestに渡す?

737 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/08/16(火) 08:28:28.59 .net]
判断ってファイル名をリストすんの?
最終的にどうしたいの?

738 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/08/16(火) 11:19:32.81 .net]
grep -qr 文字列 ディレクトリ



739 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/08/16(火) 12:55:22.82 .net]
あったら処理Aを実行しその結果を返却、なかったら正常終了としたい

740 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/08/16(火) 13:02:40.67 .net]
if grep -qr 文字列 ディレクトリ; then 処理A; else exit 0; fi

741 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/08/20(土) 19:23:45.23 .net]
find . | grep xargs 〜

742 名前:名無しさん@お腹いっぱい。 [2016/08/21(日) 09:28:24.43 .net]
> find . | grep xargs 〜
とても斬新

743 名前:名無しさん@お腹いっぱい。 [2016/08/23(火) 01:57:32.12 .net]
今freebsdのミラーサイトおかしくない?

744 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/08/23(火) 02:07:00.60 .net]
どうおかしいのかくわしく

745 名前:名無しさん@お腹いっぱい。 [2016/08/23(火) 02:08:14.36 .net]
freebsd-update fetch
freebsd-update install
ができない

746 名前:名無しさん@お腹いっぱい。 [2016/08/23(火) 02:08:58.40 .net]
ミラーサイトを色々変えてもだめ

747 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/08/28(日) 20:54:56.49 .net]
読み込みたいデータが入ったファイルをcatしてwhileでreadすると
while抜けたときに変数の内容が保持されないんだけど
元のシェルスクリプトと別プロセスになってるからってことなのかな?

以下サンプル

user01@server01 ~/test $ cat t4.sh
cat work/uhl.txt | grep -v ^# | sort | uniq | while read title
do
grepvlist=`echo "$grepvlistw | grep -v \"$title\" "`
grepvlistw=$grepvlist
echo $grepvlist
done
echo "---------"
echo $grepvlist
echo $grepvlistw
echo "---------"
user01@server01 ~/test $ sh t4.sh
| grep -v "111"
| grep -v "111" | grep -v "222"
| grep -v "111" | grep -v "222" | grep -v "333"
| grep -v "111" | grep -v "222" | grep -v "333" | grep -v "444"
---------


---------
user01@server01 ~/test $ cat work/uhl.txt
111
222
333
444
user01@server01 ~/test $

748 名前:名無しさん@お腹いっぱい。 [2016/08/28(日) 21:02:27.99 .net]
while ... do ... ; done <<EOT
$(grep -v ^# <file| sort | uniq)
EOT



749 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/08/28(日) 21:03:00.60 .net]
パイプせずに-eでやろうってのはその通りですが
疑問の本質ではないのでとりあえずスルーでお願いします

750 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/08/29(月) 03:11:36.41 .net]
だったら問題の本質だけのスクリプトにすべきでは?

751 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/08/29(月) 06:36:10.22 .net]
単に簡略化して書いただけじゃ?

752 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/08/29(月) 12:49:07.23 .net]
パイプが問題の本質なんだな

パイプでつなげたwhileはサブシェルで起動するから、
> while抜けたときに変数の内容が保持されないんだけど
> 元のシェルスクリプトと別プロセスになってるからってことなのかな?
ってことになる

whileをパイプの先に置いてる限り解決しないので、>>734が本質的な解

あるいは、shじゃなくてbashとかならプロセス置換が定石

while read title; do
...
done < <(cat work/uhl.txt | grep -v ^# | sort | uniq)

753 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/08(木) 21:25:56.17 .net]
urlを取得しようと、テストで下を試したのですがダメでした。
どなたか、どうすればいいか教えてください。
お願いします。
x="x"
echo $x | grep -Ee "/[\w\.]"
echo $x | grep -Ee "\/[\w\.]"
echo $x | grep -Ee '/[\w\.]'
echo $x | grep -Ee '\/[\w\.]'
echo $x | grep -e "/[\w\.]"
echo $x | grep -e "\/[\w\.]"
echo $x | grep -e '/[\w\.]'
echo $x | grep -e '\/[\w\.]'

754 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/09(金) 00:28:23.04 .net]
やりたいことがわからない...

755 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/09(金) 13:26:15.96 .net]
テキスト中のurlを取得しようと、grepに/が先頭に来るパターンを使ってテストしてみたら、htttp://xが取得できなかった。
ヘルプミー。
だろ。

grepに/が先頭に来るパターンを使った取得は俺も出来ない。

756 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/09(金) 13:46:05.11 .net]
>>739
期待する出力は?

757 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/09(金) 14:07:32.50 .net]
>>741
おまえの言うことも分からないから739と741は同一人物っぽいな
$xがURLそのものなら加工する必要が無い

758 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/09(金) 15:51:28.22 .net]
「grep」ではなくて「sed」による例だが、
URL(URI)の中からホスト名(サーバー名 *1)を抽出したいなら
 *1 スキーム(http:)とパス(/yyy/zzz/index.html)に挟まれた部分

[入力]URL www.xxx.co.jp/yyy/zzz/index.html
[出力]ホスト名 www.xxx.co.jp

$ echo "www.xxx.co.jp/yyy/zzz/index.html" | sed -e 's/.*http:\/\/\([^\/]*\)\/.*/\1/i'
www.xxx.co.jp



759 名前:744 mailto:sage [2016/09/09(金) 16:31:07.62 .net]
実行例、何かURLの後ろに勝手に「; セミコロン」が挿入されているな
これ2chの仕様?
もし試すなら「index.html"」の後ろの「; セミコロン」は削除して試してくれ

760 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/09(金) 16:39:00.12 .net]
セミコロンなんて入ってない
あんたのブラウザの問題だろ

761 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/09(金) 16:57:52.70 .net]
>>743
741です。
妄想、乙。そのするどい頭脳でサクッとコマンド貼ってみてくださいね。

ちなみに、\wにこだわらなければ
echo $x | grep -e "/[a-zA-Z0-9\.]"
で、できる。
\wがあると、どうしてだめかはしらない。

>>744
セミコロンないよ。

762 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/09(金) 17:27:46.43 .net]
書きたかったのは echo 'x' | grep -Ee '/(\w|\.)' とかだろうけど
echo 'x' | grep :// で良い気がする

763 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/09(金) 18:44:47.37 .net]
>>744はウェブブラウザで表示するとセミコロンが見える
2chの仕様っていうか read.cgi のバグ

>>747
> \wがあると、どうしてだめかはしらない。

grep や egrep の正規表現では文字クラス […] 内のバックスラッシュ \ が特別な意味を持たないから
[\w] は \ と w にマッチする
[\.] は \ と . にマッチする

764 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/09(金) 22:23:01.76 .net]
>>747
>>741とやってることが矛盾してるが

765 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/09(金) 23:05:57.44 .net]
結局>>739が出てこない限り>>740から何一つ進まない

766 名前:739 mailto:sage [2016/09/10(土) 17:00:28.25 .net]
言葉足らずで、お騒がせしました。
やりたかったのは、テキスト中のurlの抽出です。

urlには/が入っていて、ドメイン名にはアルファベット、数字、ピリオドがあるので、
いろいろ試しているなかで、上のようなコマンドでgrepが機能しない?と思い込んだ状態に遭遇した所でした。
https+://をgrepから外したのは、ttp://やドメイン名から始まるurl対策のつもりでした。

自分の間違いを>>749の解説と>>747のイグザンプルで理解できました。
みなさん、ありがとうございました。

本来の目的はまだ試行錯誤中ですが。

767 名前:739 mailto:sage [2016/09/10(土) 17:16:44.65 .net]
https+じゃなくてhttps?でした

768 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/14(水) 14:31:43.86 .net]
<<<を使うとechoで変数を渡すより速いというのを見かけて
time for i in $( seq -w 1 1000 ) ; do x="abcdefgh" ; y=$( echo ${x} | sed -Ee s'/b.*//g' ) ; done
time for i in $( seq -w 1 1000 ) ; do x="abcdefgh" ; y=$( sed -Ee s'/b.*//g' <<< ${x} ) ; done
を試したら、<<<の方が1割ほど遅かった。環境:macosx1095+sandy
みんなはどう?



769 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/14(水) 20:50:13.24 .net]
CentOS6.8(Hyper-V上)/Haswell でも前者の方が早いですね。
time を bash 添付の物ではなく、/usr/bin/time -v /bin/bash -c '...' で計測して詳細をみると、
前者は File system outputs: の値が 0 に対して、後者は 8000 (for の繰り返し1回あたり 8 増える)
となりました。

strace で見る限りどこかに書き込んでいるようには見えないですが、内部での実装に違いが
あるようですね。

770 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/15(木) 09:05:23.94 .net]
想像だけど、echoはbashのビルトインだから起動ロスが無いのとパイプは同時起動だから、stdinが常に準備状態
<<<だど読み込むときにstdinを準備
じゃないのか?

771 名前:名無しさん@お腹いっぱい。 [2016/09/15(木) 11:53:03.00 .net]
<<<(ヒアストリング)ってbashのドキュメントにはビアドキュメントの変形と書かれてる
ってことは、fstat(0, ...)で調べりゃ、レギュラーファイルになってる筈

> <<<を使うとechoで変数を渡すより速いというのを見かけて
と言うデマの火元はどこ?

772 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/15(木) 13:09:35.23 .net]
前者はサブシェルを起動するからプロセッサが繁忙状態だと多分遅くなる
シングルコア/シングルプロセッサだと確実にヒアストリングの後者の方が速い

773 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/15(木) 19:15:16.79 .net]
>>756, >>757, >>758
解説d
ヒアストリングという言葉自体初めて知りました。
<<はヒアドキュメントということも知らずに使っていました。
環境によっては、<<<は速くなるんですね。
いい勉強になりました。

774 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/24(土) 18:27:52.80 .net]
ちょい困り案件が自己解決したのでココに書いておきます。
Macのファイルシステムって、ファイル名を UTF-8 で保存してるかと思いきや
独自の正規化がされてまして (UTF8-MAC) 例えば、
 find . -name "*ドイツ*"
とかやってもあるはずのファイルが出てこないわけです。(内部的に ド の字を ト+[濁点] みたいな格納をしてるせいです)
そこで .bash_profile に以下のように コマンドもどきの find2 を定義してやります。これで万事解決です。

# find に渡す引数を全て UTF8-MAC に変換してしてます
find2(){
eval "find "$(echo "$@" | iconv -f UTF-8 -t UTF8-MAC)
}

775 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/24(土) 18:38:10.62 .net]
>>760
他文字コードにも応用できそうだね

776 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/24(土) 18:47:05.28 .net]
変換すべきは-name ... だけでしょ 全部変換は手抜きすぎ
-execで他のプログラムに渡すUTF-8をUTF8-MACに変換されていやーんになる
汎用的にするなら要ブラッシュアップ

777 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/24(土) 21:51:49.29 .net]
>>762 了解です。
ただ -exec の方は 問題は別にあって
終端を表す \; の \(バックスラッシュ)
が消えちゃうんですね。そもそもiconv変換する前の時点で。

一応対応できたと思うんですが、
長くなったので貼るのはやめときます。

778 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/24(土) 22:10:40.49 .net]
-execは;じゃ無くて+で終端しないと原人扱いされちゃうよ
;じゃないと困るのはかなり特殊なケース



779 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/24(土) 22:13:36.64 .net]
>>760
どっかで読んだ内容だなぁと思ったら、これ↓のパクリか!
「新・OS X ハッキング! (169) Terminal上で「ダ」や「パ」が付くファイルを検索できない理由と対策 | マイナビニュース」
 news.mynavi.jp/column/osxhack/169/index.html

780 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/24(土) 23:20:43.06 .net]
やり方だけ覚えてたんですが、昔見たのはソレかもしれません。
ただ現実に必要になってみると
find . -name `echo "オランダ.png" | iconv -f UTF8 -t UTF8-MAC`
これ毎回打ち込むの面倒だなと思ってコマンド化してみた次第です。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<258KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef