Bashでプログラミング [転載禁止]©2ch.net
Bash - GNU Project - Free Software Foundation
https://www.gnu.org/software/bash/ >>150
hexdumpやodで出力すればいいんじゃないですかね 関数を定義したshファイルを実行したあと、その関数を使いたいんだけど
どうしたらいいの? >>154
汎用的に使う関数なら ~/.bashrc に書いて
あとは普通に関数名で実行すればいいだけ
function foo {
}
ならfooで呼び出し。 誰でも簡単にパソコン1台で稼げる方法など
参考までに、
⇒ 『宮本のゴウリエセレレ』 というブログで見ることができるらしいです。
グーグル検索⇒『宮本のゴウリエセレレ』
2UMY6SSHSE ☆ 私たち日本の、改憲を行いましょう。現在、衆議員と参議院の
両院で、改憲議員が3分の2を超えております。
『憲法改正国民投票法』、でググってみてください。国会の発議は
すでに可能です。平和は勝ち取るものです。お願い致します。☆☆ 僕の知り合いの知り合いができた副業情報ドットコム
関心がある人だけ見てください。
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
FOJ8E html form で書き込み送信URLエンコードされた文字列をURLデコードした後
変数Aに格納したあと 改行コードを html改行コードに変換したいのですが 改行コードがバイナリコードで格納されているため
変換がうまくできません bash でうまく変換するコードってなにかないですか? html form で書き込み送信URLエンコードされた文字列をURLデコードした後
変数Aに格納したあと 改行コードを < b r >に変換したいのですが 改行コードがバイナリコードで格納されているため
変換がうまくできません bash でうまく変換するコードってなにかないですか? 解決しました
なぜか sed のパイプで変換できなかった
trのパイプで変換してなんとかなりました
なぜだろう? >163
sedで改行をどうこうするのは意外とハイレベルな知識が要るからかな
単に改行を置換したいだけならtr使うほうが筋がいいと思う >>164
urlエンコードから飛んできた文字列をURLデコードした後の文字列はecho
なんかで出力しても隠れてみえない \n が見えない
アスキーコードで書かれた文字列はsedじゃ無理?のようなきがする POSIXのコマンドも今の人達が再設計すれば
もっと良いものが作れるんだろうな 素直にUnix2dos、dos2unix使おう、な? eval使って文字列内で実行するコマンドの返却値も標準出力も取りたいんですがどうしたらいいですか?
evalに渡すのはcurlでhttp取得なんですがurlが変わるのでそこを変数から実行したいんですが$?はevalの結果でcurlのものが取れないんです mysqlで特定の接頭辞がつくテーブルを検索し一括で削除したいのですが、クォーテション処理でうまく動作してくれません
grepで特定の接頭辞を検索してxargsで引数を渡してるのですが、xargs以降のエスケープしたりシングル・ダブルクォートと入れ替えたり
してるのですがうまくいきません。(-pで実行コマンドも確認しました。)
どなたかうまい書き方が分かる方いませんか?
mysql -u ユーザー名 -p -e 'SHOW TABLES FROM テーブル名' |grep 接頭辞_* |xargs -pI '{}' mysql -u ユーザー名 -p -e 'DROP TABLE テーブル名.\'{}\'' 実際に使って知ってる人が助けてくれるんじゃないかと思って見てたけど来ないね。
まあ、「うまくいきません」だけじゃ無理か。
同様なことを SQLite でやるとしたらこんな感じかな。
dbname='test.db'
prefix='a'
echo .table | sqlite3 "$dbname" | tr -s ' ' '\012' |
sed -e "/^$prefix/!d" -e 's/^/drop table / ; s/$/;/ ;' |
sqlite3 "$dbname"
一般的な話として、引数で渡すためにはシェルの文法に従う必要があるから
それを大変だと思うならパイプを使えばいいと思うよ。
そういう使い方ができる場合はね。
3 日近く経ってるし、もう自分で解決してるよね。 そもそも何が問題なのかわからんしなぁ
xargs使う理由もわからんし。俺ならそんな使い方しない。
たくさんのDROP TABLE文で埋め尽くされたSQLファイルを作ってを実行するとかさぁ
いやテーブル名羅列するだけでいいのか
grepでテーブル名引っ張るとかあり得んし。
SHOW TABLES FROMはこの場合に適切なんだっけ?
ああ、思い出したINFORMATION SCHEMA.TABLESとかあったなぁ
ともかくシェルスクリプトでやることじゃないよね
なんのために問い合わせが得意なRDBMS使ってるのさ? 「LIKE」句を使って、テーブル名で絞り込む。
最後に「meta」で終わるテーブルだけを表示したい
mysql> SHOW TABLES FORM wordpress LIKE "%meta";
「mysql show tables」で検索! >>170, 171, 172
レスが遅くなって申し訳ありません。
CMSのインストール・削除のトライアンドエラーを
繰り返しているうちにテーブルが増えてきてしまった次第です。
やりたいことは、たくさんあるテーブルの中から
特定の接頭辞が付くテーブルだけを検索し削除したいです。
`drop table from 〇〇`でググるとかなりの割合の方が
bashでmysqlのコマンドを書いて力技で削除しているようでした。
当方もそれに習って色々試したのですが、
うまく動作せずに困っておりました。
こういった場合の無駄なくシンプルに削除するに
適切なコマンドはどうしたらよいのでしょうか? なんでわざわざ手間がかかることするかね?自動化したいんじゃないだろ?
>>172みたいに該当するテーブル一覧でもだして、テキストエディタでも使って
drop table from table1
drop table from table2
drop table from table3
とかいうSQL作って、それを実行すりゃいいやん
シンプルにしたいんだろ?なんでわざわざxargsとか使って複雑なものを作ろうとしてるんだ
自動化したいなら↑の内容を一つづつ自動化しろ。いっぺんにやろうとすんなよ。
1. テーブル一覧を、drop table from ○○にしやすいようにテーブル名のみの出力にしろ
2. テーブル名のリストをdrop table from ○○のリストに変換するスクリプトを作れ
3. そのスクリプトの出力をmysqlコマンドに流せ
これだけだろ
> ググるとかなりの割合の方が
ググるとかなりの割合の方が馬鹿なだけ >>174
詳しいアドバイスありがとうございます!
本当に目から鱗です。
レスを見て2分で解決しました。
bashで力技で何時間も悪戦苦闘していたのが
悲しくなるくらい呆気なさでした。
本当に的確なアドバイスありがとうございます! やってることが複雑になったと感じたら、最初に戻って考え直すことだ。 バッシュの教科書って本買おうとしたけど、どこでも売り切れてて人気みたい こういったケースの空白文字がある場合のワンライナーはどう書けばいいですか??
・特定のディレクトリの中にある大量のファイル
・ファイルは全て同じ拡張子(.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
``` 慣れてる人ならともかくリネームとかいう取り返しのつかない作業を
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"
みたいなシェルスクリプトを生成して実行する
実行前に目視で確認できるし、場合によっては手動で修正すればいいし そもそもファイル名に空白が入ってなければ正しく動くのか?
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/'
とするのが手っ取り早いと思う。
でもいきなりこんなことはしたくないね。
少なくともファイル名の衝突くらいはチェックしないと。 空白入るなら、ダブルクォートをエスケープして入れてやればいい、と。
そもそも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の方がベターだ。
で、そうすっとこれが多分模範回答
find . -type f -regex "\./\-[a-zA-Z0-9-]*.mp3$" \
-exec echo mv -v \"{}\" \"`echo {}|sed 's/\-[a-zA-Z0-9-]*.mp3$/.mp3/'`\" \;
で、いずれもmvの前にechoを入れてるので、よさげだったら、echoを削って祈ってw (´-`).。oO(>>1 は、いなくなったか…) if文で文字列を正規表現にマッチしたら抽出、という処理を作りたいのですが、
マッチしたら一つ目の文字列は抽出出来ましたが、二つ目以降マッチしたものが抽出できません
どうコードを書けば良いのでしょうか [[ foo-bar =~ (foo)-(bar) ]] && echo ${BASH_REMATCH[2]}
的な?
0にマッチ全体、カッコでグループ化すればn番目の部分マッチが1以降に入る
barが出るはず 推測だけど、一つ目のマッチだけ見えているんじゃなく、全体のマッチだけ見えてるんじゃないか?
配列変数を添字なしで参照すると0番目の要素が返る、よくある罠
$BASH_REMATCH
= ${BASH_REMATCH[0]}
= foo-bar
違ったらすまん nnn=111;mmm=0;echo $nnn | read mmm;echo $mmm
0
なんで? UIDとEUID を食い違いさせる方法って どんなのがありますか?