シェルスクリプトの総合スレです。
□お約束
・特記なき場合はBourne Shell(/bin/sh)もしくはPOSIX準拠の互換シェルがデフォルトです。
bash/zsh/ksh/ash/dash/yash/poshなどの専用機能に依存する場合は明示しましょう。
Linuxユーザは/bin/shの正体がbashまたはdashなので特に注意。
FreeBSDユーザは/bin/shの正体がashなので注意。
・POSIXについてのリンクは https://en.wikipedia.org/wiki/POSIX にまとめられています
最新の仕様はこちらへ http://pubs.opengroup.org/onlinepubs/9699919799/
(左上の「Shell & Utilities」 から参照することができます。)
・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に逃げずにシェルスクリプトで処理するのが頭のいいやり方。
質問に対して問題が間違ってるといちゃもんをつけるのもやめましょう
シェルスクリプト総合 その27
https://mevius.5ch.net/test/read.cgi/unix/1525337663/
探検
シェルスクリプト総合 その28
■ このスレッドは過去ログ倉庫に格納されています
2018/08/02(木) 05:22:16.82
2018/12/26(水) 01:04:21.34
105名無しさん@お腹いっぱい。
2018/12/26(水) 08:34:29.572018/12/26(水) 08:47:38.26
回答ちゃんと読め
2018/12/26(水) 09:08:14.92
PowerShellなんぞ興味が無いから知らんという人が多かろう
標準出力と標準エラー出力をファイルとコンソールの両方に出したいと言えばいい
知ってるがお前の態度が気に入らない(AA略)
標準出力と標準エラー出力をファイルとコンソールの両方に出したいと言えばいい
知ってるがお前の態度が気に入らない(AA略)
108名無しさん@お腹いっぱい。
2018/12/26(水) 18:22:57.16 生意気だな
2018/12/26(水) 18:30:53.30
ドザはどこ行ってもあれだな
2018/12/26(水) 19:04:39.84
ドザがー ドザがー
111名無しさん@お腹いっぱい。
2019/01/10(木) 14:22:50.61 やっつけ
$ {
> echo foo
> ECHO bar
> } 2>&1 | tee result.txt
foo
ECHO: コマンドが見つかりません
$ {
> echo foo
> ECHO bar
> } 2>&1 | tee result.txt
foo
ECHO: コマンドが見つかりません
112名無しさん@お腹いっぱい。
2019/01/26(土) 23:47:05.51 FreeBSD の /usr/bin/man で、
if { sizes=$($STTY size 0>&3 2>/dev/null); } 3>&1; then
という記述があるんですが、これって何をしているんでしょう。
・標準エラー出力を捨てている
・3 を 標準入力の指す先 (tty) に設定?
・0 を ↑の3に設定?
3>&1 して 1>&3 なら退避目的かなと思うんですが、これは違うので、
意図がわからないです。
ソースはここです。
https://github.com/freebsd/freebsd/blob/master/usr.bin/man/man.sh#L646
if { sizes=$($STTY size 0>&3 2>/dev/null); } 3>&1; then
という記述があるんですが、これって何をしているんでしょう。
・標準エラー出力を捨てている
・3 を 標準入力の指す先 (tty) に設定?
・0 を ↑の3に設定?
3>&1 して 1>&3 なら退避目的かなと思うんですが、これは違うので、
意図がわからないです。
ソースはここです。
https://github.com/freebsd/freebsd/blob/master/usr.bin/man/man.sh#L646
2019/01/28(月) 19:18:42.39
・MANWIDTH=ttyのときはmanの標準出力1の横幅を取得したい。
・sttyの操作対象端末は標準入力0で、出力先は標準出力1。
・a>&b は dup2(b,a) のことで、左を使うと実体は右になる。
・標準エラー出力2は捨てる。
という前提で、
sizes=$($STTY size 0>&1 2>/dev/null) と書くと、
sttyの標準出力1は$()に取られてるから、manの標準出力1とは別物になって、
正しい端末をsttyできない。
{ sizes=$($STTY size 0>&3 2>/dev/null); } 3>&1 は、1が取られ
てるなら3を中継すれば安全じゃねと書いたものと推測される。
{ sizes=$($STTY size 2>/dev/null); } 0>&1 と書けば十分なはず。
・sttyの操作対象端末は標準入力0で、出力先は標準出力1。
・a>&b は dup2(b,a) のことで、左を使うと実体は右になる。
・標準エラー出力2は捨てる。
という前提で、
sizes=$($STTY size 0>&1 2>/dev/null) と書くと、
sttyの標準出力1は$()に取られてるから、manの標準出力1とは別物になって、
正しい端末をsttyできない。
{ sizes=$($STTY size 0>&3 2>/dev/null); } 3>&1 は、1が取られ
てるなら3を中継すれば安全じゃねと書いたものと推測される。
{ sizes=$($STTY size 2>/dev/null); } 0>&1 と書けば十分なはず。
114名無しさん@お腹いっぱい。
2019/01/29(火) 01:14:27.65 findした結果を1行づつ配列に代入したい場合にはどうすればよいでしょうか?
当方が書いたshellだと、検索したい文字列に空白があるケースだと
そこで要素が別れてしまいます。
array=$(find ${HOME}/animal -type d -iname "*検索したい文字列*")
当方が書いたshellだと、検索したい文字列に空白があるケースだと
そこで要素が別れてしまいます。
array=$(find ${HOME}/animal -type d -iname "*検索したい文字列*")
2019/01/29(火) 12:56:34.68
IFSを改行のみにする
116112
2019/01/30(水) 08:38:21.70 >>113
ありがとうございます!
リダイレクトにstdin/stdoutの差し替え的な使い方があるとか、sttyはstdinを見るとか、sttyがstdinを見てもstdoutを見てもそれが端末を指しているなら同じこととか、数枚目からうろこが落ちました。
しかしそもそもsttyはデフォルトのstdin見ておけばいいんじゃね、とも思ったり。command |man 的な使い方ってあったっけなぁ。
ありがとうございます!
リダイレクトにstdin/stdoutの差し替え的な使い方があるとか、sttyはstdinを見るとか、sttyがstdinを見てもstdoutを見てもそれが端末を指しているなら同じこととか、数枚目からうろこが落ちました。
しかしそもそもsttyはデフォルトのstdin見ておけばいいんじゃね、とも思ったり。command |man 的な使い方ってあったっけなぁ。
2019/02/05(火) 14:26:11.34
少々スレ違いですがお許しください
OS 組み込みの tcsh をバージョンアップしたいのですが、
シェルスクリプトの挙動が変わってしまうのが怖くて、なるべく
コンパイル時オプション(configure オプション)を揃えたいのですが
バイナリしかない場合に、コンパイル時オプションを調べる方法ってないですかね?
## 例えば ISC BIND の -V オプションみたいな
OS 組み込みの tcsh をバージョンアップしたいのですが、
シェルスクリプトの挙動が変わってしまうのが怖くて、なるべく
コンパイル時オプション(configure オプション)を揃えたいのですが
バイナリしかない場合に、コンパイル時オプションを調べる方法ってないですかね?
## 例えば ISC BIND の -V オプションみたいな
2019/02/07(木) 03:39:18.86
少々じゃないくらい違うなあ
2019/02/07(木) 03:40:20.92
しかもマルチかよ
120名無しさん@お腹いっぱい。
2019/07/27(土) 21:39:15.96 ログインシェルでfishを使う時、
https://gist.github.com/mitukiii/4954559
できたらやり方教えてください
$ myCommand
タブキー押すと
$ myCommand
foo -- do foo
bar -- do bar
unk -- do toilet
って候補と1行説明表示されて
$ myCommand f
でタブーキー押すと
$ myCommand foo
と補完される
方法を知りたいです
これできたら重いzshから魚に乗り換えられる
https://gist.github.com/mitukiii/4954559
できたらやり方教えてください
$ myCommand
タブキー押すと
$ myCommand
foo -- do foo
bar -- do bar
unk -- do toilet
って候補と1行説明表示されて
$ myCommand f
でタブーキー押すと
$ myCommand foo
と補完される
方法を知りたいです
これできたら重いzshから魚に乗り換えられる
2019/07/30(火) 12:52:38.09
ここはシェルスクリプトのスレです。
シェルの使い方のスレではありません。
スクリプトの話をしてください
シェルの使い方のスレではありません。
スクリプトの話をしてください
2019/07/30(火) 22:27:15.09
具体的に何を語ったらいいの
2019/07/31(水) 19:16:20.41
シェルスクリプトだけで実装した一番高速なFizzBuzzはどんなものかとか
124名無しさん@お腹いっぱい。
2019/08/01(木) 10:04:58.33 yash使てる?
2019/08/01(木) 14:04:09.49
使えてないという報告は一つもない
2019/08/01(木) 22:41:59.49
「使てる(つこてる)?」は「使っていますか?」という意味の質問であって、使用可能かどうかを聞いてる訳では無いのでは
2019/08/01(木) 23:04:57.30
真面目君か
2019/08/05(月) 09:18:07.69
ほにゃらら
ほんじゃらら
かきく
0 あいう
かきく
1 あいう
かきく
2 あいう
かきく
3 あいう
かきく
4 あいう
かきく
5 あいう
さしすせそ
と書かれたテキストファイルを作りたいです
echo -e ほにゃらら"\n"ほんじゃらら > index.txt
seq -f "%g あいう" 0 5 > index.txt
ここまではわかったんですが、seqで連番を書き出す時に番号と番号の間の行に「かきく」を入れて最後の行に「さしすせそ」を加えるやり方教えてほしいです
ほんじゃらら
かきく
0 あいう
かきく
1 あいう
かきく
2 あいう
かきく
3 あいう
かきく
4 あいう
かきく
5 あいう
さしすせそ
と書かれたテキストファイルを作りたいです
echo -e ほにゃらら"\n"ほんじゃらら > index.txt
seq -f "%g あいう" 0 5 > index.txt
ここまではわかったんですが、seqで連番を書き出す時に番号と番号の間の行に「かきく」を入れて最後の行に「さしすせそ」を加えるやり方教えてほしいです
2019/08/05(月) 10:32:33.45
awkとかじゃいかんの
2019/08/05(月) 11:55:34.38
>>129
ありがとうございます
調べてみました
cat > index.txt << "EOF"
ほにゃらら
ほんじゃらら
あいう
EOF
seq 0 5 | awk -v 'ORS= あいう\nかきく\n' '{print $1}' >> index.txt
echo さしす >> index.txt
ありがとうございます
調べてみました
cat > index.txt << "EOF"
ほにゃらら
ほんじゃらら
あいう
EOF
seq 0 5 | awk -v 'ORS= あいう\nかきく\n' '{print $1}' >> index.txt
echo さしす >> index.txt
2019/08/05(月) 11:55:45.48
こうやると
ほにゃらら
ほんじゃらら
あいう
0 あいう
かきく
1 あいう
かきく
2 あいう
かきく
3 あいう
かきく
4 あいう
かきく
5 あいう
かきく
さしす
と出力されました
最後から2行目の「かきく」を出さないやり方が分からないです
ほにゃらら
ほんじゃらら
あいう
0 あいう
かきく
1 あいう
かきく
2 あいう
かきく
3 あいう
かきく
4 あいう
かきく
5 あいう
かきく
さしす
と出力されました
最後から2行目の「かきく」を出さないやり方が分からないです
2019/08/05(月) 12:05:17.31
ブレース展開
2019/08/05(月) 12:11:44.60
一応これでうまくいきました
cat > index.txt << "EOF"
ほにゃらら
ほんじゃらら
かきく
EOF
seq 0 5 | awk -v 'ORS= あいう\nかきく\n' '{print $1}' >> index.txt
sed -i -e '$d' index.txt
echo さしす >> index.txt
cat > index.txt << "EOF"
ほにゃらら
ほんじゃらら
かきく
EOF
seq 0 5 | awk -v 'ORS= あいう\nかきく\n' '{print $1}' >> index.txt
sed -i -e '$d' index.txt
echo さしす >> index.txt
2019/08/05(月) 12:13:50.09
>>132
自分のやり方はなだったらしそうなのでそのキーワード調べてみます
自分のやり方はなだったらしそうなのでそのキーワード調べてみます
2019/08/05(月) 12:28:22.64
えー、難しい...
俺>>129はこんなもんしか考えてなかったけど
awk 'BEGIN{print"ほにゃらら\nほんじゃらら";for(i=0;i<6;i++){printf"かきく\n%d あいう\n",i};print"さしすせそ"}'
俺>>129はこんなもんしか考えてなかったけど
awk 'BEGIN{print"ほにゃらら\nほんじゃらら";for(i=0;i<6;i++){printf"かきく\n%d あいう\n",i};print"さしすせそ"}'
136名無しさん@お腹いっぱい。
2019/08/05(月) 12:28:39.742019/08/05(月) 12:29:43.26
あ、バックスラッシュが円記号になってしまった...
2019/08/05(月) 12:30:25.69
cat > index.txt << "EOF"
ほにゃらら
ほんじゃらら
EOF
printf "かきく\n%s\n" {0..5}あいう >> index.txt
これだと大分短くて出来たけど、数字と「あいう」の間にスペースが入れられない
ほにゃらら
ほんじゃらら
EOF
printf "かきく\n%s\n" {0..5}あいう >> index.txt
これだと大分短くて出来たけど、数字と「あいう」の間にスペースが入れられない
2019/08/05(月) 12:32:03.53
2019/08/05(月) 12:43:19.31
141名無しさん@お腹いっぱい。
2019/08/05(月) 13:06:08.43 >>140
> これだとファイルへの書き込みは1回ですみますね
どんな方法で作るにせよ { } で括れば一回にまとめられるよ
{
printf '%s\n' 'ほにゃらら'
printf '%s\n' 'ほんじゃらら'
printf 'かきく\n%s あいう\n' $(seq 0 5)
printf '%s\n' 'さしすせそ'
} >index.txt
> これだとファイルへの書き込みは1回ですみますね
どんな方法で作るにせよ { } で括れば一回にまとめられるよ
{
printf '%s\n' 'ほにゃらら'
printf '%s\n' 'ほんじゃらら'
printf 'かきく\n%s あいう\n' $(seq 0 5)
printf '%s\n' 'さしすせそ'
} >index.txt
2019/08/05(月) 15:17:00.15
>>141
こんな方法もあるんですね
ありがとうございます
curlの標準出力の6行目を変数に入れて他の文字列と組み合わせて標準出力に出力したいです。
URL="hoge"
ROKU="curl -sS $URL | sed -n '6p'"
echo "あいうえお"$ROKU"さしすせそ"
しかし結果はこうなりました
あいうえおcurl -sS hoge | sed -n '6p'さしすせそ
こんな方法もあるんですね
ありがとうございます
curlの標準出力の6行目を変数に入れて他の文字列と組み合わせて標準出力に出力したいです。
URL="hoge"
ROKU="curl -sS $URL | sed -n '6p'"
echo "あいうえお"$ROKU"さしすせそ"
しかし結果はこうなりました
あいうえおcurl -sS hoge | sed -n '6p'さしすせそ
2019/08/05(月) 15:18:57.84
2019/08/05(月) 16:33:57.17
printf "あいうえお"
$ROKU #chomp のように\nを消すパイプ必要だと思う
printf "さしすせそ"
$ROKU #chomp のように\nを消すパイプ必要だと思う
printf "さしすせそ"
2019/08/05(月) 17:18:21.98
2019/08/05(月) 18:01:04.99
>>128
> と書かれたテキストファイルを作りたいです
こうすれば良いのでは?
cat<<HERE > index.txt
ほにゃらら
ほんじゃらら
かきく
0 あいう
かきく
1 あいう
かきく
2 あいう
かきく
3 あいう
かきく
4 あいう
かきく
5 あいう
さしすせそ
HERE
> と書かれたテキストファイルを作りたいです
こうすれば良いのでは?
cat<<HERE > index.txt
ほにゃらら
ほんじゃらら
かきく
0 あいう
かきく
1 あいう
かきく
2 あいう
かきく
3 あいう
かきく
4 あいう
かきく
5 あいう
さしすせそ
HERE
147名無しさん@お腹いっぱい。
2019/08/05(月) 19:41:32.36 >>142
コマンドの標準出力を変数に設定したりコマンドの引数にしたりするには
「コマンド置換」 $(…) を使います
あと、「6行目」以外の部分も取り出したくなったときに curl を何度も実行したくはないので
curl と sed は分けておきたいところ
するとこんな感じ
PAGE=$(curl -sS "$URL")
ROKU=$(printf '%s\n' "$PAGE" | sed -n '6p')
NANA=$(printf '%s\n' "$PAGE" | sed -n '7p')
printf 'あいうえお%sさしすせそ\n' "$ROKU"
printf 'かきくけこ%sたちつてと\n' "$NANA"
コマンドの標準出力を変数に設定したりコマンドの引数にしたりするには
「コマンド置換」 $(…) を使います
あと、「6行目」以外の部分も取り出したくなったときに curl を何度も実行したくはないので
curl と sed は分けておきたいところ
するとこんな感じ
PAGE=$(curl -sS "$URL")
ROKU=$(printf '%s\n' "$PAGE" | sed -n '6p')
NANA=$(printf '%s\n' "$PAGE" | sed -n '7p')
printf 'あいうえお%sさしすせそ\n' "$ROKU"
printf 'かきくけこ%sたちつてと\n' "$NANA"
2019/08/06(火) 10:37:34.03
2019/08/29(木) 02:47:55.71
$ bash -c 'unset a b;echo 10|read a;let b=a+10;echo $b'
10
この動作ってPOSIX的にはどうなの?
10
この動作ってPOSIX的にはどうなの?
2019/08/29(木) 05:08:51.78
読みづれーなw
bash -c '
unset a b
echo 10 | read a
# echo $a = 空
let b=a+10
echo $b
'
letはPOSIXにない
readはサブシェルなんだからaは空に決まってる
ごく普通の正しい動作
bash -c '
unset a b
echo 10 | read a
# echo $a = 空
let b=a+10
echo $b
'
letはPOSIXにない
readはサブシェルなんだからaは空に決まってる
ごく普通の正しい動作
2019/08/29(木) 05:09:53.11
正しいコード
bash -c '
unset a b
echo 10 | {
read a
let b=a+10
echo $b
}
'
bash -c '
unset a b
echo 10 | {
read a
let b=a+10
echo $b
}
'
2019/08/29(木) 23:22:24.50
letまで考えて無かったすまん
まあ説明の為なのでそこは目をつぶってくれたまい
opensuzeなんだけども
$ ksh -c 'unset a b;echo 10|read a;let b=a+10;echo $b'
20
$
この動作ってPOSIX的にはどうなの?
まあ説明の為なのでそこは目をつぶってくれたまい
opensuzeなんだけども
$ ksh -c 'unset a b;echo 10|read a;let b=a+10;echo $b'
20
$
この動作ってPOSIX的にはどうなの?
2019/08/30(金) 06:34:55.40
バグ
2019/09/10(火) 19:48:12.68
curlのやり方教えてください
ブラウザのフォームにjsonを書いてポストボタンを押すとokが出るけどターミナルからcurlでやろうとすると、ボディが空だとなり送信出来ません
書き方間違えていますか?
https://i.imgur.com/Nvm7CMj.jpg
ブラウザのフォームにjsonを書いてポストボタンを押すとokが出るけどターミナルからcurlでやろうとすると、ボディが空だとなり送信出来ません
書き方間違えていますか?
https://i.imgur.com/Nvm7CMj.jpg
2019/09/11(水) 14:49:50.58
ブラウザの開発ツールからcURLでコピーした方が早そうだぞ
2019/09/11(水) 15:08:13.17
2019/09/12(木) 17:05:57.53
アプリの起動判定をしたいんですが
ps -alxw | grep アプリ名
2行より多ければアプリが起動してるんだと思いますけど確実な方法ありますか?
ps -alxw | grep アプリ名
2行より多ければアプリが起動してるんだと思いますけど確実な方法ありますか?
2019/09/12(木) 17:48:19.11
killall -0 アプリ名
とか?
とか?
2019/09/12(木) 19:39:47.90
2019/09/13(金) 07:33:53.20
起動してないとわかっても、その直後に起動することも有るから
ロックを掛けないと確実にはならないけどな
ロックを掛けないと確実にはならないけどな
2019/09/14(土) 01:15:30.85
pgrepでええやん、と思ったけど環境依存か
2019/09/14(土) 02:03:14.71
>>160
どの環境でも使えるロックの機構ってなにかある?
どの環境でも使えるロックの機構ってなにかある?
2019/09/14(土) 03:45:32.29
>>162
set -C もしくは mkdir
set -C もしくは mkdir
164名無しさん@お腹いっぱい。
2020/01/20(月) 04:38:26.60 怒らないで教えて欲しいんだけど何でお前らPowerShell使わないの?
今やPowerShellの方が勉強会でドヤれるしちょまどなんかもPowerShellだってよ
今やPowerShellの方が勉強会でドヤれるしちょまどなんかもPowerShellだってよ
2020/01/20(月) 07:42:20.05
>>164
なんでそんなに無意味な宣伝するの?
なんでそんなに無意味な宣伝するの?
2020/01/20(月) 13:22:02.65
2020/01/20(月) 15:09:31.95
>>164
linux のコマンド群が使えないから
linux のコマンド群が使えないから
2020/01/21(火) 10:19:02.74
ソースコードをダウンロードしてビルドしようとしたら…
ERROR: You must either be root or be able to use sudo
ビルドするのに root になれって? この時点で話にならないよ。
ERROR: You must either be root or be able to use sudo
ビルドするのに root になれって? この時点で話にならないよ。
2020/01/21(火) 11:46:33.77
>>168
それってパワーシェルの話?
それってパワーシェルの話?
2020/01/21(火) 21:58:33.32
そのメッセージでググっても、インストール時のメッセージしか見つからないね
https://www.google.com/search?q=%22ERROR%3A+You+must+either+be+root+or+be+able+to+use+sudo%22
ビルドしようとしたら出たって言うから、
別の話か、嘘つきでは?w
https://www.google.com/search?q=%22ERROR%3A+You+must+either+be+root+or+be+able+to+use+sudo%22
ビルドしようとしたら出たって言うから、
別の話か、嘘つきでは?w
2020/01/21(火) 22:20:06.48
>>168
エラーメッセージには「sudo を使え」と書いてあるが
エラーメッセージには「sudo を使え」と書いてあるが
2020/01/22(水) 02:27:49.96
とりあえず適当なことを言ってPowerShellを
貶めたかったんだろ?バレて逆効果になってるがw
貶めたかったんだろ?バレて逆効果になってるがw
2020/02/17(月) 09:08:53.72
grep 等の外部コマンド?を使わずに任意の文字列の最初に見つかる3桁の数字を得る方法があれば教えて下さい
(例えば、abc_4_de_99_fgh_ijklm_no_567_2_123_pqrst_uvwx_yz だと567)
(例えば、abc_4_de_99_fgh_ijklm_no_567_2_123_pqrst_uvwx_yz だと567)
2020/02/17(月) 12:51:47.30
bashなら=~と、$BASH_REMATCH使えばできるんじゃね
2020/02/17(月) 12:52:43.82
>>173
おまえは俺かw
似たようなことをやったよ。grepで(笑)
外部コマンドを使わないなら、こうなるから面倒くさいんだよな。
できるけど面倒くさい。だから遅いけどgrepにした。
v=abc_4_de_99_fgh_ijklm_no_567_2_123_pqrst_uvwx_yz
v=${v#"${v%%[0-9][0-9][0-9]*}"}
v=${v%"${v#[0-9][0-9][0-9]}"}
おまえは俺かw
似たようなことをやったよ。grepで(笑)
外部コマンドを使わないなら、こうなるから面倒くさいんだよな。
できるけど面倒くさい。だから遅いけどgrepにした。
v=abc_4_de_99_fgh_ijklm_no_567_2_123_pqrst_uvwx_yz
v=${v#"${v%%[0-9][0-9][0-9]*}"}
v=${v%"${v#[0-9][0-9][0-9]}"}
2020/02/17(月) 13:01:06.73
シェルスクリプトだと(bash依存は知らん)
マッチした部分を含めて削除はできるけど
マッチした部分を残したその他を削除が簡単にできないんだよね。
だから「マッチした部分を含めて削除」したら残りが
「マッチしなかった部分」になるのを利用して、
改めて全体から「マッチしなかった部分」を取り除くというのを前後でやればできる。
マッチした部分を含めて削除はできるけど
マッチした部分を残したその他を削除が簡単にできないんだよね。
だから「マッチした部分を含めて削除」したら残りが
「マッチしなかった部分」になるのを利用して、
改めて全体から「マッチしなかった部分」を取り除くというのを前後でやればできる。
2020/02/19(水) 01:25:53.44
ありがとうございます
面倒でも前後から不要部分を取り除くしかないのですね
面倒でも前後から不要部分を取り除くしかないのですね
2020/02/19(水) 03:44:34.80
「マッチした部分を含めて削除」ってどうやるの?
2020/02/19(水) 07:39:09.82
>>178
${v%%[0-9][0-9][0-9]*} ってかいてあるやん
abc_4_de_99_fgh_ijklm_no_567_2_123_pqrst_uvwx_yz ・・・(1)
↓ ${v%%[0-9][0-9][0-9]*}
abc_4_de_99_fgh_ijklm_no_ ・・・(2)
↓ (1)ー(2)
567_2_123_pqrst_uvwx_yz ・・・(A)
↓ ${v%"${v#[0-9][0-9][0-9]}"}
_2_123_pqrst_uvwx_yz ・・・(B)
↓ (A)ー(B)
567
${v%%[0-9][0-9][0-9]*} ってかいてあるやん
abc_4_de_99_fgh_ijklm_no_567_2_123_pqrst_uvwx_yz ・・・(1)
↓ ${v%%[0-9][0-9][0-9]*}
abc_4_de_99_fgh_ijklm_no_ ・・・(2)
↓ (1)ー(2)
567_2_123_pqrst_uvwx_yz ・・・(A)
↓ ${v%"${v#[0-9][0-9][0-9]}"}
_2_123_pqrst_uvwx_yz ・・・(B)
↓ (A)ー(B)
567
2020/02/19(水) 12:18:21.18
>>179
丁寧にありがとう!
丁寧にありがとう!
2020/02/21(金) 17:55:59.15
182名無しさん@お腹いっぱい。
2020/02/22(土) 16:29:53.08 それらをPowerShellで書くとどうなるか?
一度でも考えてみたことはありますか?
一度でも考えてみたことはありますか?
2020/02/22(土) 16:45:28.02
PowerShellで書くとLinuxで動かすのが大変になります。
2020/02/26(水) 03:34:54.75
5年くらいするとセキュリティパッチが出なくなって使用禁止になるから
また作り直しになるんだろうどうせ。
また作り直しになるんだろうどうせ。
2020/03/13(金) 23:32:50.67
例えば中身が
3,soba,inarizusi,hishimoti,ushioziru ...
のcsvファイルなら最初の数字が3なので以下の文字列の3番目をつないで soBa inArizusi hiShimoti usHioziru ... でbash ... というように
csvファイルの最初の値で以降の処理が変わる場合はどうすればいいでしょうか?
一度ファイルを最後まで空読みすれば簡単なのですが、読み込みは1度で終わらせたいです。
3,soba,inarizusi,hishimoti,ushioziru ...
のcsvファイルなら最初の数字が3なので以下の文字列の3番目をつないで soBa inArizusi hiShimoti usHioziru ... でbash ... というように
csvファイルの最初の値で以降の処理が変わる場合はどうすればいいでしょうか?
一度ファイルを最後まで空読みすれば簡単なのですが、読み込みは1度で終わらせたいです。
2020/03/14(土) 16:01:32.08
宿題は自分でやりなよ
187名無しさん@お腹いっぱい。
2020/03/14(土) 17:54:51.47 >>185
なんでそんな分かりづらい説明するんだ?
なんでそんな分かりづらい説明するんだ?
188名無しさん@お腹いっぱい。
2020/03/14(土) 17:55:37.96 全く意味がわからん。
誰か翻訳してくれ
誰か翻訳してくれ
2020/03/14(土) 18:20:44.65
>>185
引数で単語と数字nを受け取ってn文字目の単語を返す関数を書けばいいだけ
引数で単語と数字nを受け取ってn文字目の単語を返す関数を書けばいいだけ
2020/03/14(土) 18:34:21.42
>>189
日本語ではなくてbashでお願いします!!
日本語ではなくてbashでお願いします!!
2020/03/14(土) 18:41:35.26
>>188
結果だけ見たら
入力テキストをカンマで区切って
最初の数値を取得 ⇒ nとする
残りの文字列のn番目の文字をアッパーケースに変換して空白区切りで連結する
かな
俺ならテキストが小さいならBashで一気に読んで処理すればいいと思うしでかいならPythonとかで処理する
結果だけ見たら
入力テキストをカンマで区切って
最初の数値を取得 ⇒ nとする
残りの文字列のn番目の文字をアッパーケースに変換して空白区切りで連結する
かな
俺ならテキストが小さいならBashで一気に読んで処理すればいいと思うしでかいならPythonとかで処理する
192名無しさん@お腹いっぱい。
2020/03/14(土) 20:00:13.75 > 俺ならテキストが小さいならBashで一気に読んで処理すればいいと思うしでかいならPythonとかで処理する
これはなんで? 小さいとかの境目はどれくらい?
これはなんで? 小さいとかの境目はどれくらい?
2020/03/14(土) 20:15:35.44
そんなこと聞いてくるようではセンスがないよ
センスがない奴にいくら説明しても無駄
センスがない奴にいくら説明しても無駄
2020/03/14(土) 20:18:24.03
pythonだと単語のn文字目を取り出すなんて朝飯前だしな
関数書く手間が一つ省ける
関数書く手間が一つ省ける
2020/03/14(土) 20:24:34.26
疑問になった点は「テキストが小さいなら」です。
その他の話は聞いてません。
その他の話は聞いてません。
2020/03/14(土) 20:26:37.39
> pythonだと単語のn文字目を取り出すなんて朝飯前だしな
単語の3文字目(オフセット2から1文字)を取り出す
echo "${str:2:1}"
Pythonだとどう朝飯前なんですか?
単語の3文字目(オフセット2から1文字)を取り出す
echo "${str:2:1}"
Pythonだとどう朝飯前なんですか?
2020/03/14(土) 20:48:13.52
早く答えのスクリプトを書いてください!!
遅いですよ!!
遅いですよ!!
2020/03/14(土) 21:05:30.89
2020/03/14(土) 21:19:09.39
2020/03/14(土) 22:00:38.59
>>198
1MBってことは、1行256バイトとして4096行以下なら小さいってことですね。
10MBで約4万行、100MBで約40万行、1GBで400万行
昔のExcelの制限が1シート65000行だったことを考えると
エクセルで扱えるデータなら問題なさそうですね
1MBってことは、1行256バイトとして4096行以下なら小さいってことですね。
10MBで約4万行、100MBで約40万行、1GBで400万行
昔のExcelの制限が1シート65000行だったことを考えると
エクセルで扱えるデータなら問題なさそうですね
2020/03/14(土) 22:38:14.38
アスペかよw
アスペならちゃんと改行コードも数えるんだぞ?
アスペならちゃんと改行コードも数えるんだぞ?
2020/03/15(日) 13:40:07.33
2020/03/20(金) 18:13:05.78
185です。説明不足ですみません。
やりたいことは1行目を読み取り、2行目以降はそのままwhileループで最後まで読みたいのです。
ただそのためだけにフラグを使うのもなんだかなぁと。
やりたいことは1行目を読み取り、2行目以降はそのままwhileループで最後まで読みたいのです。
ただそのためだけにフラグを使うのもなんだかなぁと。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- なぜ若者は結婚しないのか?「金がないから」説を裏付ける明確な根拠 [首都圏の虎★]
- 【立川・小学校侵入】男招集の母親は「金髪ヤンキー」酒ビン片手に暴れた男2人も「ヤンキー」…保護者・児童「いじめは聞いたことない」 [ぐれ★]
- 日本マクドナルド、レジ袋の有料化終了へ… 三崎優太氏が称賛 「誰が得するのか謎なくらい面倒くさい制度だよな」 [冬月記者★]
- 【実況】MLB『ドジャース vs Dバックス』 先発・佐々木朗希、1番DH・大谷翔平 NHK BS 10:30~ [冬月記者★]
- 政府の借金1323兆円に 24年度末、9年連続で最大 ★4 [首都圏の虎★]
- 対ドイツ戦勝記念日に硫黄島画像 トランプ氏が投稿、歴史混同か [蚤の市★]
- 佐々木炎上wwwwwwwwwwwwwww
- 【画像】学校帰りにこの花の蜜吸ってたヤツwww
- (ヽ゜ん゜)「ミセス聞かないYOASOBI聞かない米津玄師聞かないXG聞かないKing Gnu聞かないaimer聞かない」じゃあ何聴いてるんだよ [732289945]
- 【実況】博衣こよりのえちえちクロノクロス🧪
- 【悲報】藤井聡太名人、選択的夫婦別姓支持を表明したことにより将棋ファンから「反日名人」「国賊売国奴」「藤井サヨ太」と呼ばれ始める [513133237]
- ベルばらカフェ「コスプレ客は出禁です」私服で行ったロリィタ姫が追い返される😭これ万博のせいだろ [485187932]