シェルスクリプトの総合スレです。
□お約束
・特記なき場合は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に逃げずにシェルスクリプトで処理するのが頭のいいやり方。
質問に対して問題が間違ってるといちゃもんをつけるのもやめましょう
前スレ シェルスクリプト総合 その26
https://mevius.5ch.net/test/read.cgi/unix/1489979246/
シェルスクリプト総合 その27
■ このスレッドは過去ログ倉庫に格納されています
2018/05/03(木) 17:54:23.25
2018/05/21(月) 09:55:33.18
forで回してifで分岐してcpするだけだと思うけど、
自分ではどこまでできてんの?
自分ではどこまでできてんの?
74名無しさん@お腹いっぱい。
2018/05/21(月) 10:02:06.882018/05/21(月) 10:09:07.33
それを使わずにどうやろうというんだ
要するに連番ディレクトリに全てtestファイルがあるようにしたい、ただし既存のtestファイルは上書きしない、でいいのか
要するに連番ディレクトリに全てtestファイルがあるようにしたい、ただし既存のtestファイルは上書きしない、でいいのか
76名無しさん@お腹いっぱい。
2018/05/21(月) 10:10:59.07 >>75
全くおっしゃる通りです
全くおっしゃる通りです
2018/05/21(月) 10:19:49.89
filehoge="test"
[ ! -f "$filehoge" ] exit 1
seq -f 'hoge%02g' 1 99 | while read hogedir
do
[ -d "$hogedir" ] && [ ! -f "$hogedir/$filehoge" ] && { cp "$filehoge" "$hogedir"; echo "copied into $hogedir"; }
done
[ ! -f "$filehoge" ] exit 1
seq -f 'hoge%02g' 1 99 | while read hogedir
do
[ -d "$hogedir" ] && [ ! -f "$hogedir/$filehoge" ] && { cp "$filehoge" "$hogedir"; echo "copied into $hogedir"; }
done
2018/05/21(月) 10:20:58.69
seq -f 'hoge%02g' 0 99
の間違い。00からなので
の間違い。00からなので
79名無しさん@お腹いっぱい。
2018/05/21(月) 10:25:03.402018/05/21(月) 10:38:02.84
お題として遊ぶなら、findしてexec内でやっつけるとかかな
8172
2018/05/21(月) 10:39:59.27 自分はfindを使うやり方を考えていました
2018/05/21(月) 10:42:46.03
findは存在を確認するのは楽だろうけど、存在しないことを確認するのは面倒じゃない?
2018/05/21(月) 10:50:09.46
2018/05/21(月) 10:57:49.03
あー、" で括るだけか。アレの場合も
for hogedir in "$(seq -f 'hoge%02g' 1 99)"
が、よりかな
for hogedir in "$(seq -f 'hoge%02g' 1 99)"
が、よりかな
2018/05/21(月) 11:19:28.01
やっぱりダメなのかな??
touch 'hoge 01';touch 'hoge$02'
for name in "$(/bin/ls -1)"
/bin/ls -1 | while read name
やっぱforはメンドクサイから、安心簡単な while でいいやっ
touch 'hoge 01';touch 'hoge$02'
for name in "$(/bin/ls -1)"
/bin/ls -1 | while read name
やっぱforはメンドクサイから、安心簡単な while でいいやっ
8672
2018/05/21(月) 12:04:38.468772
2018/05/21(月) 12:08:42.09 初心者ですが面白くなってきました
今日中に仕上げられるよう頑張ります
今日中に仕上げられるよう頑張ります
2018/05/21(月) 12:31:18.57
楽しめるうちにたくさん学習しておくんだぞ
2018/05/21(月) 15:08:37.35
90名無しさん@お腹いっぱい。
2018/05/21(月) 18:16:23.91 質問です。
シェルスクリプトファイルを実行する方法として
1. 利用者に応じた実行権限を賦与する
$ chmod +x scriptfile.sh
$ ./scriptfile.sh
2. sh(1)コマンドの引数として実行する
$ sh scriptfile.sh
という方法がありますが,どちらがより良いか教えてください(というかスクリプトの実行結果自体にはたして違いはあるのでしょうか)。
今まで一つ目の方法しか知りませんでしたが,もし二つ目になんら欠点がなければよりコマンドの数が少ない
(極端に言えばchmod(1)コマンドがなくてもできる)後者の方法を使っていきたいです。
どうかよろしくおねがいします。
シェルスクリプトファイルを実行する方法として
1. 利用者に応じた実行権限を賦与する
$ chmod +x scriptfile.sh
$ ./scriptfile.sh
2. sh(1)コマンドの引数として実行する
$ sh scriptfile.sh
という方法がありますが,どちらがより良いか教えてください(というかスクリプトの実行結果自体にはたして違いはあるのでしょうか)。
今まで一つ目の方法しか知りませんでしたが,もし二つ目になんら欠点がなければよりコマンドの数が少ない
(極端に言えばchmod(1)コマンドがなくてもできる)後者の方法を使っていきたいです。
どうかよろしくおねがいします。
2018/05/21(月) 18:37:27.68
psで見てみ。1 でも、そのシェルスクリプトファイルのシバン(*1)で指定したインタプリタ(シェル)を、引数としてそのシェルスクリプトファイルをで起動してるから
1はコマンド、2はスクリプトファイルっていう違い。/usr/binなどの中のコマンドでも実態はシェルスクリプトやPerlスクリプト等なのがあるけど、そんなの気にしてない気づいてなくコマンドとして使ってたりするだろ?
まあ、コマンドとして必要じゃない(コマンドの数が少ないって意味がわからんが一時的とかか?)んだったら、別にスクリプトファイルとしてで全然普通
1) お約束事項のような
#!/bin/sh
もう俺は気にしてなくて
#!/bin/bash
だけど
1はコマンド、2はスクリプトファイルっていう違い。/usr/binなどの中のコマンドでも実態はシェルスクリプトやPerlスクリプト等なのがあるけど、そんなの気にしてない気づいてなくコマンドとして使ってたりするだろ?
まあ、コマンドとして必要じゃない(コマンドの数が少ないって意味がわからんが一時的とかか?)んだったら、別にスクリプトファイルとしてで全然普通
1) お約束事項のような
#!/bin/sh
もう俺は気にしてなくて
#!/bin/bash
だけど
2018/05/21(月) 19:05:05.59
使い捨てか頻繁に使うか
2018/05/21(月) 19:18:46.42
>>82
hogefile="test"
find . -maxdepth 1 -type d -name 'hoge[0-9][0-9]' -exec bash -c "test -f {}/$hogefile || cp $hogefile {}" \;
こんな感じとか?俺は、俺も、そうはしないけど。-exec は使ったことないのでどこまでできるのかよくわからんな。なのでbashスクリプトにした/逃げた
hogefile="test"
find . -maxdepth 1 -type d -name 'hoge[0-9][0-9]' -exec bash -c "test -f {}/$hogefile || cp $hogefile {}" \;
こんな感じとか?俺は、俺も、そうはしないけど。-exec は使ったことないのでどこまでできるのかよくわからんな。なのでbashスクリプトにした/逃げた
2018/05/21(月) 19:23:57.41
2018/05/21(月) 19:38:22.80
シェルプロセスが勝手に起動されるか明示的に起動するかで、なんかあった(rcやprofileを読まないとか起動時の環境設定の動作)が今回のようなのは関係ないだろう、気にすんなw
PIDはだいたい普通にインクリメント。なにかプロセスが起動するごとにそれの新しいPIDはインクリメントされた値かな
PIDはだいたい普通にインクリメント。なにかプロセスが起動するごとにそれの新しいPIDはインクリメントされた値かな
2018/05/21(月) 22:42:20.13
OSによってはセキュリティ的な理由でPIDをある程度ランダムに割り当てるので連続にはならない。
BSD系はどれもデフォルトだとランダムじゃないかな。
BSD系はどれもデフォルトだとランダムじゃないかな。
2018/05/21(月) 23:07:13.46
PIDが若いから特権があるわけでもないしPIDが推測しやすいからっていうセキュリティ懸念ってなんだろ?
2018/05/21(月) 23:36:33.95
cat >/tmp/tmpfile.$$
みたいに手抜きな一時ファイル作成してると
シンボリックリンク攻撃くらうからそのリスクを減らせたりする。
ちゃんと攻撃避ける正しい書き方してれば関係ない話だけど、
世の中にテキトーなスクリプトは尽きないから。
みたいに手抜きな一時ファイル作成してると
シンボリックリンク攻撃くらうからそのリスクを減らせたりする。
ちゃんと攻撃避ける正しい書き方してれば関係ない話だけど、
世の中にテキトーなスクリプトは尽きないから。
2018/05/21(月) 23:39:26.38
なるほど。OSのセキュリティではなくPIDを利用したナニかに対するか
2018/05/21(月) 23:43:34.05
ん?PIDを知ることができる(当然知ることは普通にできる)ってとこがキモで推測しやすいのとは別のような。まあ、いいや、ナニかあるなってことで
2018/05/21(月) 23:47:30.91
ああ、シンボリックリンク攻撃を誤解してた。事前に(大量に)シンボリックリンク作ってしまうわけね。なるほど
102名無しさん@お腹いっぱい。
2018/05/22(火) 02:34:29.36 知り合いから教えてもらったパソコン一台でお金持ちになれるやり方
時間がある方はみてもいいかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
GXGZT
時間がある方はみてもいいかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
GXGZT
2018/05/22(火) 12:13:09.28
シンボリック攻撃ってシンボリックリンクを作成する時にパーミッション関連の隙を突いて本来保護されているコマンドを改竄することだよね。
大量に作成する必要なないんじゃないかしらん。もちろんある種の陽動にはなるだろうけど。
大量に作成する必要なないんじゃないかしらん。もちろんある種の陽動にはなるだろうけど。
10472
2018/05/22(火) 19:13:09.08 >>77>>78
これで一発で成功しました
驚いています
このコードをもっと理解すると共に、自分も先輩のようなプログラマーになれるよう勉強を続けていきたいです
マジで助かり、勉強になりました
本当にありがとうございました
これで一発で成功しました
驚いています
このコードをもっと理解すると共に、自分も先輩のようなプログラマーになれるよう勉強を続けていきたいです
マジで助かり、勉強になりました
本当にありがとうございました
10572
2018/05/22(火) 23:19:32.732018/05/22(火) 23:39:50.60
>>105
別人だ。俺はスマホだからここにコードは書けん
別人だ。俺はスマホだからここにコードは書けん
2018/05/23(水) 03:10:49.54
あのなぁ、お前さんここをどこの板だと思っているんだい?
歴史あんだぜ
まあその話はもうほんとに一昔前の出来事になっちまったけどな
歴史あんだぜ
まあその話はもうほんとに一昔前の出来事になっちまったけどな
2018/05/23(水) 04:11:43.99
イザナミだ
2018/05/23(水) 10:26:18.02
伝説って?
2018/05/23(水) 10:49:34.46
なんだったか、2chの鯖に関する貢献があったような
当時からいたわけじゃないからどっかのサイトで知った話だが
Flash黄金期にその話がFlash化されてたから見て知ったな
当時からいたわけじゃないからどっかのサイトで知った話だが
Flash黄金期にその話がFlash化されてたから見て知ったな
2018/05/23(水) 12:29:35.00
read.cgiの改良作業だよね。
直接関わってはいないけど、当時はリアルタイムで見ていたし、手元の
どこかに運営から住民に開示されたread.cgiも残ってると思う。
アクセスが増えて通信量が増加して、当時借りてたホスティング業者から
追い出されそうになってたんだけど、HTTPの通信をgzipで圧縮して通信量を
削減しようという話だったかと思う。
ただ、UNIX板でも話をして作業には参加していたものの、プログラム板と
かの方でもガリガリやっていたような記憶がある。
直接関わってはいないけど、当時はリアルタイムで見ていたし、手元の
どこかに運営から住民に開示されたread.cgiも残ってると思う。
アクセスが増えて通信量が増加して、当時借りてたホスティング業者から
追い出されそうになってたんだけど、HTTPの通信をgzipで圧縮して通信量を
削減しようという話だったかと思う。
ただ、UNIX板でも話をして作業には参加していたものの、プログラム板と
かの方でもガリガリやっていたような記憶がある。
2018/05/23(水) 14:05:37.49
それとは別に SYN flood 攻撃に対し SYN cookie 有効化で対抗した時はUNIX板で主に議論してた気がする。
リアルタイムで見てたというか発言してたけど(SYN cacheと比較した得失とか書いた気が)、
こういうのはあくまで個人としての行動なので板自慢に繋げるのは好きじゃないな。
むしろ統一とかとれてなくてカオスなのが5chの良いところだと思うので。
リアルタイムで見てたというか発言してたけど(SYN cacheと比較した得失とか書いた気が)、
こういうのはあくまで個人としての行動なので板自慢に繋げるのは好きじゃないな。
むしろ統一とかとれてなくてカオスなのが5chの良いところだと思うので。
2018/05/23(水) 15:36:26.79
>>112
gzip圧縮ってapacheの設定じゃないの?
gzip圧縮ってapacheの設定じゃないの?
2018/05/23(水) 21:48:48.59
他の顧客がいるからミドルウェアで圧縮できない、というホスティング屋を使っていたんじゃなかったのかな(後から知った話だから、違うかもしれない)
116名無しさん@お腹いっぱい。
2018/05/23(水) 23:46:31.17 オイスター作戦ね
もう15年は前でしょ
もう15年は前でしょ
2018/05/24(木) 00:55:41.47
>>113
新ブラッドなつかしす
新ブラッドなつかしす
2018/05/24(木) 07:58:22.34
馴れ合いならよそでやれ(キリッ)
2018/05/24(木) 08:33:06.96
なれ合いですらなくて、おっさんが勝手に郷愁に浸ってるだけという。
2018/05/24(木) 20:05:30.06
$ cat a.file > b.file
とやるのと
$ cp a.file b.file
とやるので違いが生じる場合はありますか?
とやるのと
$ cp a.file b.file
とやるので違いが生じる場合はありますか?
2018/05/24(木) 20:22:49.22
>>120
パーミッションがどうのこうの
パーミッションがどうのこうの
2018/05/24(木) 21:28:22.51
>>120
b.fileというディレクトリがあった場合の動作
b.fileというディレクトリがあった場合の動作
2018/05/24(木) 22:42:29.15
ディレクトリの場合はケツに / つけろや
2018/05/24(木) 23:23:09.46
イミフ
2018/05/24(木) 23:30:13.33
2018/05/25(金) 00:17:51.08
意図してディレクトリじゃないからつけろもなんもないのにな
2018/05/25(金) 10:57:24.97
>>120
CoWが効いたり
CoWが効いたり
2018/05/25(金) 10:59:54.02
そんなcpの実装ってある?
2018/05/25(金) 11:34:57.95
Linuxのは実装はしてるみたいだな。デフォではないから話の流れでの実装してるとは言えんけど
2018/05/25(金) 14:50:09.69
シェルスクリプトの勉強をするのにおすすめの本はありますか?
2018/05/25(金) 15:20:37.79
2018/05/26(土) 04:09:24.19
お知恵お借りしたいです。
awk '($3 !~ /ここにパイプ区切りで記述したい/) && ($4 ~ /01/)' output.txt
上記のawkで条件に当てはまるファイルを絞り込みたいのですが
その1 別ファイルからのawkの結果を $aaa に設定してある
その2 $aaa は複数列の出力なので set コマンドにて位置パラメータに分けてある
その3 各変数を展開して文字列としてパイプで区切ってawkを使いたい。
以上のようなことをやってみたのですがどうもうまく行きません。
また、違うやり方もあるようでしたらご教示いただけるとありがたいです。
よろしくお願いします。
awk '($3 !~ /ここにパイプ区切りで記述したい/) && ($4 ~ /01/)' output.txt
上記のawkで条件に当てはまるファイルを絞り込みたいのですが
その1 別ファイルからのawkの結果を $aaa に設定してある
その2 $aaa は複数列の出力なので set コマンドにて位置パラメータに分けてある
その3 各変数を展開して文字列としてパイプで区切ってawkを使いたい。
以上のようなことをやってみたのですがどうもうまく行きません。
また、違うやり方もあるようでしたらご教示いただけるとありがたいです。
よろしくお願いします。
2018/05/26(土) 04:35:42.94
> $aaa は複数列の出力なので set コマンドにて位置パラメータに分けてある
これはどういう意味? set はシェル自身の設定だと思うんだけども
これはどういう意味? set はシェル自身の設定だと思うんだけども
2018/05/26(土) 05:07:26.79
cat ZZZ.txt |grep XXX
hoge
fuga
と複数行でしたので
aaa=$(cat ZZZ.txt |grep XXX) としてみました。
そして set $aaa と設定して
$1 $2 $3 ...と変数が自動で割り振られるなら増減しても対応できるのでは考えました。
(本来は0個のときもあるのでそれも考慮しなければならないんですが)
そして $1 等に入っている変数(hogeやfuga) を展開してパイプで区切れれば動くと思うんです。
hoge
fuga
と複数行でしたので
aaa=$(cat ZZZ.txt |grep XXX) としてみました。
そして set $aaa と設定して
$1 $2 $3 ...と変数が自動で割り振られるなら増減しても対応できるのでは考えました。
(本来は0個のときもあるのでそれも考慮しなければならないんですが)
そして $1 等に入っている変数(hogeやfuga) を展開してパイプで区切れれば動くと思うんです。
2018/05/26(土) 07:13:03.91
ごめん俺の理解が悪いと思うのだがあなたのやりたいことが見えない。
他の人にまかせるわ。
もしくはZZZ.txtの内容をプライバシーに障らない程度に具体的に教えてほしい。
「ZZZ.txtからgrepで取り出した値をパイプで連結して処理する」という文言からは
ZZZ.txtには命令が一行ずつ書かれているように受け取れるのだが、そうじゃないよね。
それとも「パイプで繋ぐ」というのはシェルのパイプ実行ではなく単に文字列としてパイプを区切りとして使うという意味?
もしそうなら
$ cat ZZZ.txt | grep XXX | tr '\n' '|' | sed 's/|$//1'
↑こういうので行けるけど。違うでしょ?
他の人にまかせるわ。
もしくはZZZ.txtの内容をプライバシーに障らない程度に具体的に教えてほしい。
「ZZZ.txtからgrepで取り出した値をパイプで連結して処理する」という文言からは
ZZZ.txtには命令が一行ずつ書かれているように受け取れるのだが、そうじゃないよね。
それとも「パイプで繋ぐ」というのはシェルのパイプ実行ではなく単に文字列としてパイプを区切りとして使うという意味?
もしそうなら
$ cat ZZZ.txt | grep XXX | tr '\n' '|' | sed 's/|$//1'
↑こういうので行けるけど。違うでしょ?
2018/05/26(土) 07:35:37.60
説明がヘタですみません。ZZZ.txtの中身はyoutube等の
URL タイトル 日付 がタブ区切りで複数行書かれているファイルです。
123.com hoge 02
456.com fuga 05
789.com peke 08
のような感じです。
それらから条件から当てはまる行や列を抜き出してパイプ区切りにしたいのです。
パイプの解釈は hoge|fuga で hoge or fuga と展開して awkのパターン入れて読ませたい訳です。
URL タイトル 日付 がタブ区切りで複数行書かれているファイルです。
123.com hoge 02
456.com fuga 05
789.com peke 08
のような感じです。
それらから条件から当てはまる行や列を抜き出してパイプ区切りにしたいのです。
パイプの解釈は hoge|fuga で hoge or fuga と展開して awkのパターン入れて読ませたい訳です。
2018/05/26(土) 08:23:21.90
>>137
なるほどね。こういうこと? (ZZZ.txtの代わりにヒアドキュメント使ってる)
$ cat <<. | awk '($2 ~ /(hoge|fuga)/) && ($3 ~ /02/) {print}'
example111.com hoge 02
example222.com hoge 03
456.com fuga 05
456example.com fuga 02
789.com peke 08
.
example111.com hoge 02
456example.com fuga 02
なるほどね。こういうこと? (ZZZ.txtの代わりにヒアドキュメント使ってる)
$ cat <<. | awk '($2 ~ /(hoge|fuga)/) && ($3 ~ /02/) {print}'
example111.com hoge 02
example222.com hoge 03
456.com fuga 05
456example.com fuga 02
789.com peke 08
.
example111.com hoge 02
456example.com fuga 02
2018/05/26(土) 09:09:37.27
勉強不足でヒアドキュメントの知識が浅くて申し訳ないのですが
多分合ってると思います。
うまくいかないのは hoge|fuga の部分が一定でなく
peke|hoge|miso だったり fuga のみだったりするので悩ましいのです。
多分合ってると思います。
うまくいかないのは hoge|fuga の部分が一定でなく
peke|hoge|miso だったり fuga のみだったりするので悩ましいのです。
2018/05/26(土) 09:53:14.80
条件をコマンドの結果から作りたい&その条件をawkの条件に埋め込みたいってだけ?
hogehuga=( $(cat ZZZ.txt |grep XXX) )
SAVEIFS=$IFS
IFS=$'|'
hogehuga="${hogehuga[*]}"
IFS=$SAVEIFS
[ "$hogehuga" = "" ] && hogehuga="0個の条件"
awk '($3 !~ /'"$hogehuga"'/) && ($4 ~ /01/)' output.txt
って感じとか
hogehuga=( $(cat ZZZ.txt |grep XXX) )
SAVEIFS=$IFS
IFS=$'|'
hogehuga="${hogehuga[*]}"
IFS=$SAVEIFS
[ "$hogehuga" = "" ] && hogehuga="0個の条件"
awk '($3 !~ /'"$hogehuga"'/) && ($4 ~ /01/)' output.txt
って感じとか
2018/05/26(土) 10:05:05.40
ああ、条件の作成は>>136の最後ですでにワンライナーで教えているのか。しつれい
2018/05/26(土) 10:44:16.45
2018/05/26(土) 10:58:04.08
2018/05/26(土) 11:18:16.86
条件文の | をパイプとかいうからわけわかんなくなる
145133
2018/05/26(土) 11:49:32.72 そういう場合はパイプって言わないんですか。失礼しました。
正規表現でつかう or の役割を hoge fuga の間には挟みたいのです。
正規表現でつかう or の役割を hoge fuga の間には挟みたいのです。
2018/05/26(土) 12:01:23.51
2018/05/26(土) 12:03:34.81
awkの手前で別途 fgrep -f か egrep -f を使った方が、改行→「|」変換をサボれて楽な気がする。
fgrep/egrep -f を使うときは bashないし zsh 依存になるけど
fgrep -f <(grep XXX ZZZ.txt)
と書くともっと楽だね。
fgrep/egrep -f を使うときは bashないし zsh 依存になるけど
fgrep -f <(grep XXX ZZZ.txt)
と書くともっと楽だね。
2018/05/26(土) 12:10:12.44
\じゃないよバックスラッシュだよ
というのがありそうな気もしないでもない
というのがありそうな気もしないでもない
149133
2018/05/26(土) 12:32:36.462018/05/26(土) 12:38:10.49
awk の文はただの文字列でしかない
awk '($3 !~ /'"$aaa"'/) && ($4 ~ /01/)' output.txt
でも、
awk "(\$3 !~ /${aaa}/) && (\$4 ~ /01/)" output.txt
でも(他にエスケープ必要なのあるかな?)、
普通にシェル変数を(文字列内に)展開するのと変わらんぞ
awk '($3 !~ /'"$aaa"'/) && ($4 ~ /01/)' output.txt
でも、
awk "(\$3 !~ /${aaa}/) && (\$4 ~ /01/)" output.txt
でも(他にエスケープ必要なのあるかな?)、
普通にシェル変数を(文字列内に)展開するのと変わらんぞ
2018/05/26(土) 12:42:16.30
書き損じどうこうじゃなくて、受け応えができないのが致命的ではあるなw
2018/05/26(土) 12:44:02.94
よく見たら、
hoge
fuga
から
hoge|fuga|neko
って、nekoはどこから来たっていう。まあうっかりだろけど
hoge
fuga
から
hoge|fuga|neko
って、nekoはどこから来たっていう。まあうっかりだろけど
153133
2018/05/26(土) 13:37:00.342018/05/27(日) 08:08:25.73
nekoです。nekoはいます。
2018/05/30(水) 15:51:14.73
寝た子は起こすな
寝子は起こすな
寝子は起こすな
156名無しさん@お腹いっぱい。
2018/05/30(水) 20:03:13.31 sedコマンドでSGRを扱いたいんですがどうすればいいですか。
$ echo abc | sed 's/^a/\033[1m&\033[0m/1'
などとしてaを太字にしたりしたいです。
$ echo abc | sed 's/^a/\033[1m&\033[0m/1'
などとしてaを太字にしたりしたいです。
2018/05/30(水) 20:16:35.46
echo abc | sed -e 's/^a/'$'\033[1m&'$'\033[0m/1'
2018/05/30(水) 21:08:39.87
横からだが、
なんのこっちゃと思ったら $'' はエスケープ文字処理してくれんのね。なるほど
最初のだけでいいのでは?もしくは最初に付ける。もしくは逐一付けて閉じる
echo abc | sed -e 's/^a/'$'\033[1m&\033[0m/1'
echo abc | sed -e $'s/^a/\033[1m&\033[0m/1'
echo abc | sed -e 's/^a/'$'\033''[1m&'$'\033''[0m/1'
と思いました
なんのこっちゃと思ったら $'' はエスケープ文字処理してくれんのね。なるほど
最初のだけでいいのでは?もしくは最初に付ける。もしくは逐一付けて閉じる
echo abc | sed -e 's/^a/'$'\033[1m&\033[0m/1'
echo abc | sed -e $'s/^a/\033[1m&\033[0m/1'
echo abc | sed -e 's/^a/'$'\033''[1m&'$'\033''[0m/1'
と思いました
159156
2018/05/31(木) 06:51:45.12 ありがとうございます。解決しました。
これは後出しになってしまいますが、POSIXの範囲でやりたかったので
$''ではなく$(printf)を使いました。
これは後出しになってしまいますが、POSIXの範囲でやりたかったので
$''ではなく$(printf)を使いました。
2018/06/02(土) 23:56:12.94
英語圏の序数詞を適切に処理するシェルスクリプト(というかワンライナー)を考えたのですが添削してください
$ for i in $(seq 15); do echo $i$(case $i in *1) echo st;; *2) echo nd;; *3) echo rd;; *) echo th;; esac); done
出力は一応望み通りでまたPOSIX utils+seq(1)のみで実行可能です。
$ for i in $(seq 15); do echo $i$(case $i in *1) echo st;; *2) echo nd;; *3) echo rd;; *) echo th;; esac); done
出力は一応望み通りでまたPOSIX utils+seq(1)のみで実行可能です。
2018/06/03(日) 00:35:29.50
11st とか 12nd になってるけどそれはいいの?
162名無しさん@お腹いっぱい。
2018/06/03(日) 00:38:58.53 なにいっとるんやこいつw
163名無しさん@お腹いっぱい。
2018/06/03(日) 01:12:42.26 なにいっとるんやってなにいっとるんやww
164160
2018/06/03(日) 01:46:34.86 すいません。>>161 さまのおっしゃる通りです。
$ for i in $(seq 30); do echo $i$(case $i in *1?) echo th;; *1) echo st;; *2) echo nd;; *3) echo rd;; *) echo th;; esac); done
これでどうでしょうか
$ for i in $(seq 30); do echo $i$(case $i in *1?) echo th;; *1) echo st;; *2) echo nd;; *3) echo rd;; *) echo th;; esac); done
これでどうでしょうか
2018/06/03(日) 16:20:05.98
クソ
2018/06/03(日) 16:34:12.72
いんでね
2018/06/03(日) 17:38:56.64
まず添削してくださいってどうしてほしいんだ
ちゃんと動いてんならそれはもう正解だと思うんだが
ちゃんと動いてんならそれはもう正解だと思うんだが
2018/06/03(日) 21:36:16.19
実際間違ってたんだし、いいじゃん
2018/06/04(月) 20:30:59.60
>>167
ちゃんと動いているかどうか判断できないから聞いてるんでは
ちゃんと動いているかどうか判断できないから聞いてるんでは
2018/06/04(月) 20:52:08.98
エラるのはbashのバージョンのせいかな?3.2.57ではエラる/4.3.48では問題ない
だとしたらPOSIX utils云々はちょっと違うんじゃねと思わなくもない。POSIX utils云々って書いている意図がよくわからんけど
だとしたらPOSIX utils云々はちょっと違うんじゃねと思わなくもない。POSIX utils云々って書いている意図がよくわからんけど
2018/06/04(月) 21:51:17.95
case文をこうしたら3.2.57で動いた
case $i in (*1?) echo th;; (*1) echo st;; (*2) echo nd;; (*3) echo rd;; (*) echo th;; esac
case $i in (*1?) echo th;; (*1) echo st;; (*2) echo nd;; (*3) echo rd;; (*) echo th;; esac
2018/06/04(月) 22:16:01.07
おおっ。ぱーふぇくつ(?)やねっ!
( が必要??なんなんなん??と謎だけど
( が必要??なんなんなん??と謎だけど
2018/06/04(月) 22:26:45.14
$() 内では、case の ) を case の ) と認識してないで、$( の終わりと見てまうってのか。それで普通は使わない ( をか。いちおう ( はつけてもいいのね。つけてもつけなくてもいい存在みたいだけど
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【鮭】20代女性の車のドアノブに体液、不同意わいせつ未遂の容疑で広島市安佐北区の30歳無職男を逮捕 [nita★]
- 渡邊渚「性を売ってるくせに」批判に反論 幻滅「これが日本の現状だよなー」「『渾身の下着!』というような意味でやってない」★3 [Ailuropoda melanoleuca★]
- 【生成ポルノで初】AI生成の児童ポルノ画像の所持疑いで元教諭を初摘発… [BFU★]
- 鈴木農相、地元JAから借入金 おこめ券巡り利害誘導との批判も★2 [安倍聖帝★]
- トランプ米大統領、「台湾保証実行法案」に署名 法案提出議員「支配しようとする中国に我々が断固として立ち向かう」 ★3 [お断り★]
- 【格闘技】朝倉未来「てめえ、今からやってやろうか?」 前代未聞のブチギレ! 関東最大級ギャングの元ボスと一触即発 [冬月記者★]
- 日本人「みんなちがって、みんないい?」「ルールがーマナーがー協調性がー郷に入れば郷に従えだよ」一丸となって頑張ろう🙆」 [289765331]
- 【高市悲報】プリキュア「いま私たちは環境問題に関心があるの」 プリオタ「ギェェェェェ思想が強すぎる!!」大炎上🔥 [762037879]
- 【01:45NHK~】サッカーW杯2026グルーブ分け組み合わせ抽選会いよいよスタート! ★2 [339712612]
- 女国会議員「夫がサンドイッチ用に6枚切りの食パンを買ってきました…」 ツイ民「6枚切りでもレシピあるよ」 女国会議員(スゥ…) [279254606]
- 抜け忍ってエッチな言葉じゃないの?
- 【悲報】日本人、気づき始める「高市早苗総理、なんか思ってたのと違う…」
