- 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/
- 667 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/06/13(月) 22:49:39.12 .net]
- >>654
ファイルがぶっ壊れちゃったじゃないか(#゚Д゚) ゴルァ!! なんつって
- 668 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/06/13(月) 22:58:56.61 .net]
- >>653
ありがとうございます 最終文字を取り出して調べるというわけですね いじれそうです たぶんGNUのtailが必須じゃないかと思うのですが、 非GNU環境でも動くようにはならないでしょうか
- 669 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/06/13(月) 23:07:30.48 .net]
- >>654
ありがとうございます ただ、これは目的の動作ではありません 末尾に空行が欲しいのではなく、 改行文字で終わっていない最終行に改行をつけたいのです
- 670 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/06/14(火) 00:26:19.34 .net]
- >>652
#!/bin/sh echo wq | ed "$1"
- 671 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/06/14(火) 00:51:00.50 .net]
- >>652
for f in *.txt do [ $(tail -1 "$f" | wc -l) -eq 0 ] && echo >> "$f" done
- 672 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/06/14(火) 00:57:30.09 .net]
- >>652
for f in *.txt do { tail -1 "$f" | read; } || echo >> "$f" done
- 673 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/06/14(火) 02:14:34.40 .net]
- edかex使ったほうが楽なんじゃないか
- 674 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/06/14(火) 02:55:20.33 .net]
- 659 と 661 の違いは空ファイル(サイズ0)の場合。
ed はそのままだけど、tail -1 ... | read では newline が追加される。
- 675 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/06/14(火) 17:09:51.68 .net]
- >>659-663
みなさんありがとうございます edは思いつきませんでした どこでもあるかと思ったらないのもありますね。exはありそうです 改行のない最終行がwcにカウントされないとか 改行がないとreadがエラーコード返すとか すごくためになりました 空ファイルの動作の差についてはサイズを調べて分岐すればいいですね
- 676 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/06/15(水) 01:17:10.55 .net]
- >>652
sed -i -e '$a\' file unix.stackexchange.com/questions/31947/how-to-add-a-newline-to-the-end-
- 677 名前:of-a-file []
- [ここ壊れてます]
- 678 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/06/15(水) 02:02:23.61 .net]
- ed や sed で追加する場合は元々ファイルの末尾に "\n" があるファイルの
タイムスタンプを更新してしまうんだな
- 679 名前:名無しさん@お腹いっぱい。 [2016/06/15(水) 14:17:26.63 .net]
- おまえら知らんだろうけど、俺の家のそばの歩行者信号はUNIXのコンソールみたいに
青になるまで(赤になるまで)ドット(.)の点滅がひとつずつ消えていくんだぜ・・? 夜なんか見るとKDEみたいな感じですげえカッコイイぜ。
- 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?でした
|

|