トップページunix
1002コメント330KB

シェルスクリプト総合 その25©5ch.net

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

find 引数 -maxdepth 0 -name *.sh -exec bin/sh -c ' {} ' \;
0643名無しさん@お腹いっぱい。2016/06/11(土) 10:22:42.97
シェルスクリプトじゃないけどrun-partsが似たような仕事するね
0644名無しさん@お腹いっぱい。2016/06/12(日) 05:31:11.76
for sh in $dir/*.sh; do $sh; done
0645名無しさん@お腹いっぱい。2016/06/12(日) 11:11:52.76
Cygwin(bash)で特定の拡張子の映像ファイルをforループ文でまわして処理したいと思っています

for input in *
do
 (処理)
done

これだと映像ファイルだけでなく全てのファイルが対象になってしまいます。
そうではなくて WMV、MP4、AVI、MPEG、MPGといった映像ファイルだけを
処理するにはどうしたらいいでしょうか?
0646名無しさん@お腹いっぱい。2016/06/12(日) 11:15:55.66
>>645
そもそもなんでファイルを振り分けてないのか?
0647名無しさん@お腹いっぱい。2016/06/12(日) 11:25:58.85
>>646
ffmpegで処理してるので映像ファイルの種類は分けなくても良かったりします
あ、ただ変換後の拡張子は統一するようスクリプトを書かないといけませんね
0648名無しさん@お腹いっぱい。2016/06/12(日) 11:44:06.36
>>645

for input in $(ls -1 *.{wav,mp4,avi,mpeg,mpg} 2>/dev/null)
do
 (処理)
done

とか。
0649名無しさん@お腹いっぱい。2016/06/12(日) 11:52:44.28
>>648
これじゃダメな場合があるんだっけ?

for input in *.wav *.mp4 *.avi *.mpeg *.mpg
do

done
0650名無しさん@お腹いっぱい。2016/06/12(日) 12:07:38.74
.wavファイルがないとinputには"*.wav"がそのまま入る
だけど、ループの中で処理する時に
[ -f "$input" ] || continue
とでもしとけばいいよね
0651名無しさん@お腹いっぱい。2016/06/12(日) 12:36:44.21
>>648
>>650
なるほど、そういう方法がありましたか。
ありがとうございますm(_ _)m

>>649
>>650さんのご指摘通りその拡張子のファイルが無いとそのまま入っちゃうって問題がありますね
0652名無しさん@お腹いっぱい。2016/06/13(月) 20:14:40.91
テキストファイルの最終行に改行がないときだけ
改行を追加するようなスクリプトってどう書けばいいでしょうか?
0653名無しさん@お腹いっぱい。2016/06/13(月) 22:21:10.97
>>652
それ、自分が前悩んで作ったのがある。誰か改善してくれ
#!/bin/sh
file=$1
test -f $file || exit 0

# if size -eq 0; then exit 0
if [ ! -s $file ]; then
 exit 0
fi

# if the last character is not \n, then echo
if [ "$(tail -c 1 $file | cat -A)" != "$" ]; then
 echo
fi
if ! tail -n 1 $file | grep '^$' > /dev/null ; then
 echo
fi
0654名無しさん@お腹いっぱい。2016/06/13(月) 22:23:13.08
test -n "$(tail -n1 TXT)" && echo > TXT
06556522016/06/13(月) 22:28:48.20
すまない。>>653はmbox形式のファイルにメールを追加するために作ったスクリプトだった
だから>>652さんの求めているスクリプトとはちょっと違った_o_
0656名無しさん@お腹いっぱい。2016/06/13(月) 22:49:39.12
>>654
ファイルがぶっ壊れちゃったじゃないか(#゚Д゚) ゴルァ!!
なんつって
0657名無しさん@お腹いっぱい。2016/06/13(月) 22:58:56.61
>>653
ありがとうございます
最終文字を取り出して調べるというわけですね
いじれそうです
たぶんGNUのtailが必須じゃないかと思うのですが、
非GNU環境でも動くようにはならないでしょうか
0658名無しさん@お腹いっぱい。2016/06/13(月) 23:07:30.48
>>654
ありがとうございます
ただ、これは目的の動作ではありません
末尾に空行が欲しいのではなく、
改行文字で終わっていない最終行に改行をつけたいのです
0659名無しさん@お腹いっぱい。2016/06/14(火) 00:26:19.34
>>652

#!/bin/sh
echo wq | ed "$1"
0660名無しさん@お腹いっぱい。2016/06/14(火) 00:51:00.50
>>652

for f in *.txt
do
[ $(tail -1 "$f" | wc -l) -eq 0 ] && echo >> "$f"
done
0661名無しさん@お腹いっぱい。2016/06/14(火) 00:57:30.09
>>652

for f in *.txt
do
{ tail -1 "$f" | read; } || echo >> "$f"
done
0662名無しさん@お腹いっぱい。2016/06/14(火) 02:14:34.40
edかex使ったほうが楽なんじゃないか
0663名無しさん@お腹いっぱい。2016/06/14(火) 02:55:20.33
659 と 661 の違いは空ファイル(サイズ0)の場合。
ed はそのままだけど、tail -1 ... | read では newline が追加される。
0664名無しさん@お腹いっぱい。2016/06/14(火) 17:09:51.68
>>659-663
みなさんありがとうございます
edは思いつきませんでした
どこでもあるかと思ったらないのもありますね。exはありそうです
改行のない最終行がwcにカウントされないとか
改行がないとreadがエラーコード返すとか
すごくためになりました
空ファイルの動作の差についてはサイズを調べて分岐すればいいですね
0665名無しさん@お腹いっぱい。2016/06/15(水) 01:17:10.55
>>652
sed -i -e '$a\' file
http://unix.stackexchange.com/questions/31947/how-to-add-a-newline-to-the-end-of-a-file
0666名無しさん@お腹いっぱい。2016/06/15(水) 02:02:23.61
ed や sed で追加する場合は元々ファイルの末尾に "\n" があるファイルの
タイムスタンプを更新してしまうんだな
0667名無しさん@お腹いっぱい。2016/06/15(水) 14:17:26.63
おまえら知らんだろうけど、俺の家のそばの歩行者信号はUNIXのコンソールみたいに
青になるまで(赤になるまで)ドット(.)の点滅がひとつずつ消えていくんだぜ・・?

夜なんか見るとKDEみたいな感じですげえカッコイイぜ。
0668名無しさん@お腹いっぱい。2016/06/15(水) 14:54:39.46
眼科行けよ・・・
0669名無しさん@お腹いっぱい。2016/06/15(水) 14:58:10.28
日常生活の夜景にKDEを妄想する病気か。
IT土方の後遺症
0670名無しさん@お腹いっぱい。2016/06/15(水) 17:06:08.30
>>665
おお、これはシンプルですね
空ファイルでもちゃんと対応できています
man見てもそんな動作するとは明示されてないのですが
安定した仕様と考えていいのでしょうか
0671名無しさん@お腹いっぱい。2016/06/15(水) 19:20:41.67
$ <- 最終行
a <- add. 置換ならsが有名. pでprint
\ 何もない シェルスクリプトでも改行またぐときに使うやつ

類似した構文
seq 20 | head
seq 20 | sed -n '1,10p'
0672名無しさん@お腹いっぱい。2016/06/15(水) 21:22:12.46
それだったら

seq 20 | sed 10q

の方が良いかもしんない
0673名無しさん@お腹いっぱい。2016/06/16(木) 01:11:19.56
>>652
http://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
0674名無しさん@お腹いっぱい。2016/06/16(木) 14:28:12.81
>>673
おお、awkは明白でわかりやすいですね
改行抜きで読んだ各行を改行付きでprintするわけですね
その意味ではawkで完璧なcatはできないのかな
紹介していただいたページには他にもいろいろ解法があっておもしろいです
ありがとうございます
0675名無しさん@お腹いっぱい。2016/06/16(木) 15:35:18.42
grep + moreutils の sponge

$ grep '' file | sponge file
0676名無しさん@お腹いっぱい。2016/06/16(木) 19:35:59.66
>>675
grepだけでも末尾に改行つけるんですね
でもこの仕様も安定性が心配
0677名無しさん@お腹いっぱい。2016/06/16(木) 20:54:54.26
コマンドラインから翻訳API使ってるがおもしろすぎるw
0678名無しさん@お腹いっぱい。2016/06/19(日) 12:33:57.95
Windows7上でCygwinを動かしbashスクリプトを記述しています。

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

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

このように特定のタスク/アプリケーションの起動を検知するスクリプトをbashで
記述するにはどうしたらよろしいでしょうか?
0679名無しさん@お腹いっぱい。2016/06/19(日) 14:28:17.66
ps -W | grep "Windows Media Player" | grep -v grep
0680名無しさん@お腹いっぱい。2016/06/19(日) 14:30:25.15
"Windows Media Player"の部分は実際のexeになると思うから
ps -Wで表示されるのにしてね
0681名無しさん@お腹いっぱい。2016/06/19(日) 15:43:42.63
>>679
>>680
ありがとうございますm(_ _)m
0682名無しさん@お腹いっぱい。2016/06/20(月) 18:07:32.11
そういう時は pgrep を使えよ! と思って手元の Cygwin (64bit) に procps-ng を
インストールしてみたんだけど、これって cygwin 配下のプロセスしか見えないのね……
0683名無しさん@お腹いっぱい。2016/06/20(月) 23:14:14.04
大変出遅れたけど
>>649
の問題はbashなんだしshopt -s nullglobで済むのでは?
0684名無しさん@お腹いっぱい。2016/06/21(火) 02:08:19.29
横からだけど、bash なら nullglob でいけるな〜
むっちゃ参考になった。ありがとう
0685名無しさん@お腹いっぱい。2016/07/03(日) 14:58:46.31
OSXのsedメモ

ダメ
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]*!!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'

+と?の代わりになるいい方法ないですか?
0686名無しさん@お腹いっぱい。2016/07/03(日) 15:23:02.40
-e じゃなくて -E つかうとか?
0687名無しさん@お腹いっぱい。2016/07/03(日) 15:27:38.26
$ echo "123.abcd" | sed -Ee 's!\.[a-zA-Z]+!!g'
123
$ echo "123.abcd" | sed -Ee 's!\.[a-zA-Z]?!!g'
123bcd
0688名無しさん@お腹いっぱい。2016/07/03(日) 15:33:05.72
あ、そうか -E は代わりじゃなくて -Ee とすべきだね
0689名無しさん@お腹いっぱい。2016/07/03(日) 15:35:22.62
-Eの存在をすっかり忘れてた
ありがとう
0690名無しさん@お腹いっぱい。2016/07/03(日) 15:52:51.46
OSXにする人への注意点
デフォのままだと、'、"、-が自動的に置換されるから、環境設定>キーボード>ユーザ辞書で自動置換をoffにしたほうがいい
appごと?、ファイルごと?でもメニューバー>編集>自動置換でも自動置換をoffにできる
0691名無しさん@お腹いっぱい。2016/07/03(日) 20:21:24.00
>>690
OSX歴10年ほどだけど、そんなんの知らんかったし、
そんな目にあったことがない。ぐぐったら実在する機能らしいが、
テキストエディットでコーディングするなんて考えられないし、
あたかもすべからく機能するように誤解を誘導するのはよくない。
OSXを使い始めて困ったのは、円とバックスラッシュを区別することぐらいだ。
0692名無しさん@お腹いっぱい。2016/07/04(月) 20:49:46.74
注意点でそんな攻撃的にならなくても
そのテキストエディットのデフォ値を晒した方が有益かと
0693名無しさん@お腹いっぱい。2016/07/04(月) 21:44:12.04
マカーのレスって 〜 が、おかしいよね。
デフォルトでおかしいのが出ちゃうのか知らんけど、あれをなんとかしてほしい
0694名無しさん@お腹いっぱい。2016/07/05(火) 02:10:41.78
ゴシックなのに明朝っぽくなるやつね

自分も知ってるけど一発でマック使いだって分かるから
あのままでいいと思ってる
0695名無しさん@お腹いっぱい。2016/07/05(火) 02:24:03.69
波ダッシュの話?
あれは Windows XP がしくっただけじゃなかったっけ。
Unicode の仕様含め結構まとめてくれてる人がいるから一度読んでみたらいい。
0696名無しさん@お腹いっぱい。2016/07/05(火) 09:28:26.99
アポが勝手なことをしただけ
0697名無しさん@お腹いっぱい。2016/07/05(火) 11:46:58.78
>>696
どうぞ
http://internet.watch.impress.co.jp/docs/special/691658.html
http://internet.watch.impress.co.jp/img/iw/docs/691/658/fig_2_s.jpg
0698名無しさん@お腹いっぱい。2016/07/05(火) 14:27:46.64
それより、UFT8-macを何とかしてほしい。
日本語ファイル名だとLinuxマシンとまともに連携が取れない。
0699名無しさん@お腹いっぱい。2016/07/05(火) 15:14:05.40
>>697
お前はまとめ見て引用しか出来ない馬鹿だな
そのリンク先にも書いてあるだろ
Unicodeのイメージ(字形)が間違ってたんだよ
XPはその仕様を忠実に実装しただけであって
アポは無視したんだよ
MSもヴィスタから同じ対応をしただけだ

知ったかぶりするんじゃねーよ
0700名無しさん@お腹いっぱい。2016/07/06(水) 12:51:14.80
おい、おまえら!

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

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

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

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

セ○クス(S○X)だけだぞ!
0701名無しさん@お腹いっぱい。2016/07/06(水) 17:47:32.09
むかしYahooをヤッホーって言ってた友達を思い出した
0702名無しさん@お腹いっぱい。2016/07/06(水) 19:07:35.87
イット革命の時代には、よくあることだね
0703名無しさん@お腹いっぱい。2016/07/06(水) 20:49:19.53
伏せたらSIXだかSOXだかわかんねえな。
0704名無しさん@お腹いっぱい。2016/07/06(水) 21:36:34.09
アメリカで働いてたときはごちゃまぜだった
方言によって訛りもあるし正直通じればなんでもいい
0705名無しさん@お腹いっぱい。2016/07/07(木) 18:04:30.74
最初は現地読みで「りぬくす」または英語読みで「らいなっくす」と言われてた
0706名無しさん@お腹いっぱい。2016/07/12(火) 21:25:52.98
塩味のマムコ
0707名無しさん@お腹いっぱい。2016/07/12(火) 23:15:08.76
ちんぽ
0708名無しさん@お腹いっぱい。2016/07/14(木) 00:29:39.15
イスドンvsアドスル
0709名無しさん@お腹いっぱい。2016/07/19(火) 06:19:56.96
aliasの設定で

alias command='echo "hage"'

commandにスペースを含ませる事できないのでしょうか?
0710名無しさん@お腹いっぱい。2016/07/19(火) 08:59:57.76
>>709
bashだよね。普通にできる
0711名無しさん@お腹いっぱい。2016/07/19(火) 09:07:33.10
あ。command を "c o m m a n d" にしたいということなら
bashの識別子の条件に反するので不可
0712名無しさん@お腹いっぱい。2016/07/19(火) 19:42:55.37
>>710
710=711 と仮定して質問するけど、710はどういう場合? 何を勘違いしたかが気になって。
0713名無しさん@お腹いっぱい。2016/07/19(火) 21:28:50.34
>>712
710=711だけど、aliasで別名を定義するコマンド(つまりイコールの右側)に
スペースを入れられるのかという質問だと考えた。例示がそういう形になってるから。

もし、alias名にスペースを入れられるかという質問ならそういう例示をするはず
でも後者の質問という可能性に気づいたので、711を追加した
0714名無しさん@お腹いっぱい。2016/07/22(金) 22:58:42.81
<bashのfunctionをdeclare -fで表示すると整形してあることを利用>

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

ほとんどなんもしてないワンライナーだけど、見事にスクリプト
ファイル整形してくれる。なんか感動すたw
0715名無しさん@お腹いっぱい。2016/08/06(土) 14:00:53.40
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重起動するとファイルが壊れて
いやな思いをした経験があるのでチェック入れてます
0716名無しさん@お腹いっぱい。2016/08/07(日) 00:22:16.73
basenameじゃ駄目なの?
0717名無しさん@お腹いっぱい。2016/08/07(日) 11:38:22.64
上のif文、$fileを""で囲わなくていいの?
実際引っかかることはなさそうだけど
0718名無しさん@お腹いっぱい。2016/08/08(月) 22:34:42.13
bash の変数内の文字列削除ってどうやるのでしょうか?削除したいのは"(ダブルクォート)なんですが
testvar=aaa"aa"
${testvar##\"}

これじゃ駄目だった
0719名無しさん@お腹いっぱい。2016/08/08(月) 23:41:17.18
>>718
## は前方最長一致
全部置換するのは //

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

Bashマニュアル「パラメータの展開」セクション内「パターンの置換」
http://linuxjm.osdn.jp/html/GNU_bash/man1/bash.1.html#lbBB
0720名無しさん@お腹いっぱい。2016/08/10(水) 12:59:48.57
selectはbash専用ですか?
0721名無しさん@お腹いっぱい。2016/08/11(木) 00:06:31.61
>>720
はい
https://wiki.ubuntu.com/DashAsBinSh#select
https://github.com/koalaman/shellcheck/wiki/SC2039#select-loops
0722名無しさん@お腹いっぱい。2016/08/16(火) 04:34:02.37
特定のディレクトリ配下のファイルの中身に特定の文字列が含まれるかどうかを判定するにはどうしたらいいですか?

find xargs grep?これの行数でも数えてtestに渡す?
0723名無しさん@お腹いっぱい。2016/08/16(火) 08:28:28.59
判断ってファイル名をリストすんの?
最終的にどうしたいの?
0724名無しさん@お腹いっぱい。2016/08/16(火) 11:19:32.81
grep -qr 文字列 ディレクトリ
0725名無しさん@お腹いっぱい。2016/08/16(火) 12:55:22.82
あったら処理Aを実行しその結果を返却、なかったら正常終了としたい
0726名無しさん@お腹いっぱい。2016/08/16(火) 13:02:40.67
if grep -qr 文字列 ディレクトリ; then 処理A; else exit 0; fi
0727名無しさん@お腹いっぱい。2016/08/20(土) 19:23:45.23
find . | grep xargs 〜
0728名無しさん@お腹いっぱい。2016/08/21(日) 09:28:24.43
> find . | grep xargs 〜
とても斬新
0729名無しさん@お腹いっぱい。2016/08/23(火) 01:57:32.12
今freebsdのミラーサイトおかしくない?
0730名無しさん@お腹いっぱい。2016/08/23(火) 02:07:00.60
どうおかしいのかくわしく
0731名無しさん@お腹いっぱい。2016/08/23(火) 02:08:14.36
freebsd-update fetch
freebsd-update install
ができない
0732名無しさん@お腹いっぱい。2016/08/23(火) 02:08:58.40
ミラーサイトを色々変えてもだめ
0733名無しさん@お腹いっぱい。2016/08/28(日) 20:54:56.49
読み込みたいデータが入ったファイルを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 $
0734名無しさん@お腹いっぱい。2016/08/28(日) 21:02:27.99
while ... do ... ; done <<EOT
$(grep -v ^# <file| sort | uniq)
EOT
0735名無しさん@お腹いっぱい。2016/08/28(日) 21:03:00.60
パイプせずに-eでやろうってのはその通りですが
疑問の本質ではないのでとりあえずスルーでお願いします
0736名無しさん@お腹いっぱい。2016/08/29(月) 03:11:36.41
だったら問題の本質だけのスクリプトにすべきでは?
0737名無しさん@お腹いっぱい。2016/08/29(月) 06:36:10.22
単に簡略化して書いただけじゃ?
0738名無しさん@お腹いっぱい。2016/08/29(月) 12:49:07.23
パイプが問題の本質なんだな

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

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

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

while read title; do
...
done < <(cat work/uhl.txt | grep -v ^# | sort | uniq)
0739名無しさん@お腹いっぱい。2016/09/08(木) 21:25:56.17
urlを取得しようと、テストで下を試したのですがダメでした。
どなたか、どうすればいいか教えてください。
お願いします。
x="http://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\.]'
0740名無しさん@お腹いっぱい。2016/09/09(金) 00:28:23.04
やりたいことがわからない...
0741名無しさん@お腹いっぱい。2016/09/09(金) 13:26:15.96
テキスト中のurlを取得しようと、grepに/が先頭に来るパターンを使ってテストしてみたら、htttp://xが取得できなかった。
ヘルプミー。
だろ。

grepに/が先頭に来るパターンを使った取得は俺も出来ない。
0742名無しさん@お腹いっぱい。2016/09/09(金) 13:46:05.11
>>739
期待する出力は?
■ このスレッドは過去ログ倉庫に格納されています