Bashでプログラミング [転載禁止]©2ch.net (264レス)
1-

168: 2019/05/21(火)23:09 ID:oXRLq/xt(1) AAS
eval使って文字列内で実行するコマンドの返却値も標準出力も取りたいんですがどうしたらいいですか?

evalに渡すのはcurlでhttp取得なんですがurlが変わるのでそこを変数から実行したいんですが$?はevalの結果でcurlのものが取れないんです
169
(1): 2020/01/02(木)23:47 ID:Vb52hemx(1) AAS
mysqlで特定の接頭辞がつくテーブルを検索し一括で削除したいのですが、クォーテション処理でうまく動作してくれません

grepで特定の接頭辞を検索してxargsで引数を渡してるのですが、xargs以降のエスケープしたりシングル・ダブルクォートと入れ替えたり
してるのですがうまくいきません。(-pで実行コマンドも確認しました。)
どなたかうまい書き方が分かる方いませんか?

mysql -u ユーザー名 -p -e 'SHOW TABLES FROM テーブル名' |grep 接頭辞_* |xargs -pI '{}' mysql -u ユーザー名 -p -e 'DROP TABLE テーブル名.\'{}\''
170
(1): 2020/01/04(土)17:21 ID:E3O62f92(1) AAS
実際に使って知ってる人が助けてくれるんじゃないかと思って見てたけど来ないね。
まあ、「うまくいきません」だけじゃ無理か。
同様なことを SQLite でやるとしたらこんな感じかな。

dbname='test.db'
prefix='a'
echo .table | sqlite3 "$dbname" | tr -s ' ' '\012' |
sed -e "/^$prefix/!d" -e 's/^/drop table / ; s/$/;/ ;' |
sqlite3 "$dbname"

一般的な話として、引数で渡すためにはシェルの文法に従う必要があるから
それを大変だと思うならパイプを使えばいいと思うよ。
省2
171: 2020/01/05(日)20:01 ID:IPuUazgK(1) AAS
そもそも何が問題なのかわからんしなぁ
xargs使う理由もわからんし。俺ならそんな使い方しない。
たくさんのDROP TABLE文で埋め尽くされたSQLファイルを作ってを実行するとかさぁ
いやテーブル名羅列するだけでいいのか

grepでテーブル名引っ張るとかあり得んし。
SHOW TABLES FROMはこの場合に適切なんだっけ?
ああ、思い出したINFORMATION SCHEMA.TABLESとかあったなぁ

ともかくシェルスクリプトでやることじゃないよね
なんのために問い合わせが得意なRDBMS使ってるのさ?
172
(1): 2020/01/06(月)00:00 ID:FtTPVMr3(1) AAS
「LIKE」句を使って、テーブル名で絞り込む。
最後に「meta」で終わるテーブルだけを表示したい

mysql> SHOW TABLES FORM wordpress LIKE "%meta";

「mysql show tables」で検索!
173: 2020/01/08(水)21:40 ID:l1od5Fw+(1) AAS
>>170 171, 172
レスが遅くなって申し訳ありません。

CMSのインストール・削除のトライアンドエラーを
繰り返しているうちにテーブルが増えてきてしまった次第です。

やりたいことは、たくさんあるテーブルの中から
特定の接頭辞が付くテーブルだけを検索し削除したいです。

`drop table from 〇〇`でググるとかなりの割合の方が
bashでmysqlのコマンドを書いて力技で削除しているようでした。
当方もそれに習って色々試したのですが、
うまく動作せずに困っておりました。
省2
174
(1): 2020/01/08(水)22:01 ID:i7Ggys1A(1) AAS
なんでわざわざ手間がかかることするかね?自動化したいんじゃないだろ?
>>172みたいに該当するテーブル一覧でもだして、テキストエディタでも使って

drop table from table1
drop table from table2
drop table from table3

とかいうSQL作って、それを実行すりゃいいやん

シンプルにしたいんだろ?なんでわざわざxargsとか使って複雑なものを作ろうとしてるんだ

自動化したいなら↑の内容を一つづつ自動化しろ。いっぺんにやろうとすんなよ。
省6
175: 2020/01/09(木)15:44 ID:2gXyzp52(1) AAS
>>174
詳しいアドバイスありがとうございます!
本当に目から鱗です。

レスを見て2分で解決しました。
bashで力技で何時間も悪戦苦闘していたのが
悲しくなるくらい呆気なさでした。

本当に的確なアドバイスありがとうございます!
176: 2020/02/09(日)12:27 ID:TdA6OoR0(1) AAS
やってることが複雑になったと感じたら、最初に戻って考え直すことだ。
177: 2020/09/12(土)14:17 ID:uRW97DpA(1) AAS
バッシュの教科書って本買おうとしたけど、どこでも売り切れてて人気みたい
178: 2020/09/12(土)15:05 ID:f1Nswvqc(1) AAS
売れなかったから廃盤になるんやで
179: 2021/05/27(木)01:02 ID:m06R9ufF(1) AAS
こういったケースの空白文字がある場合のワンライナーはどう書けばいいですか??

・特定のディレクトリの中にある大量のファイル
・ファイルは全て同じ拡張子(.mp3)
・拡張子の直前にランダムのID何文字か付いている(例 -48antiO81n5Dq)
・全てのIDを取り除きリネームしたい
自分で作成したのですが最後のmvで躓いています。。
空白文字があるとそこでファイル名を分割されてうまく動作しません。
```bash
find . -type f -name "*.mp3"|grep "\-[a-zA-Z0-9-]*.mp3$"|sed "s/\-[a-zA-Z0-9-]*.mp3$/.mp3/"|xargs -n2 mv
```
180: 2021/05/27(木)12:15 ID:+SArHOBh(1) AAS
慣れてる人ならともかくリネームとかいう取り返しのつかない作業を
findとxargsでやりたくないな
俺ならリスト生成してmvするわ

mv "aaa aaa-48antiO81n5Dq.mp3" "aaa aaa.mp3"
mv "bbb bbb-48antiO81n5Dq.mp3" "bbb bbb.mp3"
mv "ccc ccc-48antiO81n5Dq.mp3" "ccc ccc.mp3"

みたいなシェルスクリプトを生成して実行する
実行前に目視で確認できるし、場合によっては手動で修正すればいいし
181
(1): 2021/05/27(木)13:40 ID:EyeK5jGy(1) AAS
そもそもファイル名に空白が入ってなければ正しく動くのか?

aaa-48antiO81n5Dq.mp3
bbb-48antiO81n5Dq.mp3

というファイルがあったら sed の出力は

aaa.mp3
bbb.mp3

となるように思うのだが。いろいろつっこみたいが、とりあえず
find . -type f | xargs -d '\n' rename 's/-[a-zA-Z0-9-]*\.mp3$/.mp3/'
とするのが手っ取り早いと思う。
でもいきなりこんなことはしたくないね。
省1
182: 2021/05/28(金)15:39 ID:RtkQ3VQL(1) AAS
どこに空白が入っているの?

例示して
183: 2021/06/04(金)21:38 ID:i0A1vKtk(1) AAS
空白入るなら、ダブルクォートをエスケープして入れてやればいい、と。

そもそもxargs使わんといけんの?
ふつうにこんなんじゃだめか?
find . -type f -name "*.mp3"|grep "\-[a-zA-Z0-9-]*.mp3$" \
| while read i;do \
echo mv -v \"$i\" \"`echo $i|sed '"s/\-[a-zA-Z0-9-]*.mp3$/.mp3/'`\"; \
done

で、そもそもfind使うなら、-nameじゃなくて-regex使った方がよくない?
grepはそのためだよな?(ってまあ、俺もgrep使うような気がするけどw)
で、さらにfind使うなら、xargsよりは-execの方がベターだ。
省4
184: 2021/11/11(木)18:26 ID:wR3FRIZb(1) AAS
(´-`).。oO(>>1 は、いなくなったか…)
185: 2022/01/11(火)19:24 ID:JlzCBGqO(1) AAS
if文で文字列を正規表現にマッチしたら抽出、という処理を作りたいのですが、
マッチしたら一つ目の文字列は抽出出来ましたが、二つ目以降マッチしたものが抽出できません
どうコードを書けば良いのでしょうか
186: 2022/01/12(水)22:51 ID:uKLEW53q(1/2) AAS
[[ foo-bar =~ (foo)-(bar) ]] && echo ${BASH_REMATCH[2]}
的な?
0にマッチ全体、カッコでグループ化すればn番目の部分マッチが1以降に入る
barが出るはず
187: 2022/01/12(水)23:04 ID:uKLEW53q(2/2) AAS
推測だけど、一つ目のマッチだけ見えているんじゃなく、全体のマッチだけ見えてるんじゃないか?
配列変数を添字なしで参照すると0番目の要素が返る、よくある罠

$BASH_REMATCH
= ${BASH_REMATCH[0]}
= foo-bar

違ったらすまん
1-
あと 77 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.012s