シェルスクリプトの総合スレです。
□お約束
・特記なき場合は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/17(木) 08:58:54.79
変数はsetとかprintenv
関数知らん
関数知らん
2018/05/17(木) 10:41:31.20
関数はtypeで返ってくるんじゃない?
2018/05/17(木) 10:46:38.47
関数はsetで出てこね?
printenvなんてあったのね。env使ってた。diffってみたが違いがわからんな。printenvの意味を後で調べてみよう
printenvなんてあったのね。env使ってた。diffってみたが違いがわからんな。printenvの意味を後で調べてみよう
6257
2018/05/17(木) 11:04:55.79 みなさまありがとうございます。
set -oおよびprintenv(これはenvと同じ出力でした。なんとなくprintenvを使いました)でかなりの部分を取り戻すことができました。
ただ、set -oで出力されるオプション設定の項目数が少ないように思うんだけども、どうなんですかね。
allexport off
braceexpand on
emacs off
errexit off
errtrace off
functrace off
hashall on
histexpand on
history on
ignoreeof off
interactive-comments on
keyword off
monitor on
noclobber off
noexec off
noglob off
nolog off
notify off
nounset off
onecmd off
physical off
pipefail off
posix off
privileged off
verbose off
vi on
xtrace off
なお、これらの内allexportやxtraceなどは設定した覚えがありません。システム設定(/etc/bash.bashrcあたり)でも設定されてません。不思議です……。
厚かましいのですが、できれば全てのオプションの状態を把握したいです。
set -oおよびprintenv(これはenvと同じ出力でした。なんとなくprintenvを使いました)でかなりの部分を取り戻すことができました。
ただ、set -oで出力されるオプション設定の項目数が少ないように思うんだけども、どうなんですかね。
allexport off
braceexpand on
emacs off
errexit off
errtrace off
functrace off
hashall on
histexpand on
history on
ignoreeof off
interactive-comments on
keyword off
monitor on
noclobber off
noexec off
noglob off
nolog off
notify off
nounset off
onecmd off
physical off
pipefail off
posix off
privileged off
verbose off
vi on
xtrace off
なお、これらの内allexportやxtraceなどは設定した覚えがありません。システム設定(/etc/bash.bashrcあたり)でも設定されてません。不思議です……。
厚かましいのですが、できれば全てのオプションの状態を把握したいです。
6357
2018/05/17(木) 11:06:15.20 すいません。shoptで行けました。ほとんど修復できました。感謝します。
2018/05/17(木) 13:23:11.51
2018/05/17(木) 13:36:50.52
>>64
ですよね……。
なぜかバックアップとシンボリックリンクを張るという馬鹿な真似をしてました。
それはもうバックアップとは言わねぇか。
次にパソコンを買った時はLVMやらで柔軟なパーティションを組んでやります
ですよね……。
なぜかバックアップとシンボリックリンクを張るという馬鹿な真似をしてました。
それはもうバックアップとは言わねぇか。
次にパソコンを買った時はLVMやらで柔軟なパーティションを組んでやります
2018/05/17(木) 15:18:16.60
ドットファイルみたいにちょくちょく書き換えしててなくなると困るファイルは
RCSなんかで管理しとくといいんじゃない?
RCSなんかで管理しとくといいんじゃない?
2018/05/17(木) 17:13:16.93
RCSとか石器時代かよ
2018/05/17(木) 19:40:33.27
SCCSですよね
2018/05/17(木) 19:43:19.47
>>66
ホームぶっ飛ばしたバカを見たことがある。 多分 rm -fr ./work を rm -fr . /work って打ったんだろう。
ホームぶっ飛ばしたバカを見たことがある。 多分 rm -fr ./work を rm -fr . /work って打ったんだろう。
2018/05/17(木) 19:48:04.21
rm -rfは本当に怖いな
71名無しさん@お腹いっぱい。
2018/05/19(土) 07:42:41.44 ★★★共産●主義者とは言葉の通じない赤犬であり、決して人間と見なしてはならない!時たま本当らしいことを言うとしても、それはより大きな嘘を覆い隠す為の罠である。★★★
● この掲示板(万有サロン)に優秀な書き込みをして、総額148万円の賞金をゲット●しよう!(*^^)v
http://jbbs.livedoor.jp/study/37●29/ →リンクが不良なら、検索窓に入れる!●
● この掲示板(万有サロン)に優秀な書き込みをして、総額148万円の賞金をゲット●しよう!(*^^)v
http://jbbs.livedoor.jp/study/37●29/ →リンクが不良なら、検索窓に入れる!●
72名無しさん@お腹いっぱい。
2018/05/21(月) 09:50:43.86 /home直下にhoge00〜hoge99までの名前がついているディレクトリがあるとします
他にも/home直下にはディレクトリが存在します
ディレクトリ名を検索しながら、hoge00-hoge99の名前にマッチした複数のディレクトリの中の、ある特定のディレクトリに既存のファイルであるtestという名前のファイルをコピーしたいです
ある特定の、という意味は
・hoge○○ディレクトリ直下にtestというファイルがあったら→スルー
・testというファイル名のファイルがhoge○○直下になければ、既存のtestを該当hoge○○ディレクトリ直下にコピー
このようなシェルスクリプトを書きたいのですが教えてください
他にも/home直下にはディレクトリが存在します
ディレクトリ名を検索しながら、hoge00-hoge99の名前にマッチした複数のディレクトリの中の、ある特定のディレクトリに既存のファイルであるtestという名前のファイルをコピーしたいです
ある特定の、という意味は
・hoge○○ディレクトリ直下にtestというファイルがあったら→スルー
・testというファイル名のファイルがhoge○○直下になければ、既存のtestを該当hoge○○ディレクトリ直下にコピー
このようなシェルスクリプトを書きたいのですが教えてください
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)を使いました。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【サッカー】2026年北中米W杯の組み合わせが決定! 日本代表はオランダ、チュニジア、欧州プレーオフB勝者と同組で激突★2 [久太郎★]
- 渡邊渚「性を売ってるくせに」批判に反論 幻滅「これが日本の現状だよなー」「『渾身の下着!』というような意味でやってない」★2 [Ailuropoda melanoleuca★]
- 【千葉】会社で58歳女性刺される 殺人未遂容疑で同僚の中国籍の男(39)逮捕 女性死亡 いすみ市 [ぐれ★]
- 渡邊渚さん脅迫か 写真集に包丁置く写真投稿 30代女性書類送検 渡邊さん「外に出るのも怖く身の危険を感じる」 [ひかり★]
- 【生成ポルノで初】AI生成の児童ポルノ画像の所持疑いで元教諭を初摘発… [BFU★]
- 鈴木農相、地元JAから借入金 おこめ券巡り利害誘導との批判も★2 [安倍聖帝★]
- ぼく「台湾のどこが好きなの?」日本人「親日なところ」ぼく「それ以外は?」日本人「」 [369521721]
- 【01:45NHK~】サッカーW杯2026グルーブ分け組み合わせ抽選会いよいよスタート! ★2 [339712612]
- ネトウヨもウク信も感情で外交を語っているけど、外交はそうじゃないだろ。国益になるor国益にならないなんだよ [805596214]
- AIってくだらないことに使おうとすると怒られる機能が必要じゃね?
- 【NHK/DAZN/YouTube】FIFAワールドカップ2026組み合わせ抽選★3
- 【悲報】苗場のリゾートマンション(10万円)を買おうとしてるワイを止めてくれ😭 [455031798]
