シェルスクリプト総合 その24at UNIX
シェルスクリプト総合 その24 - 暇つぶし2ch50:名無しさん@お腹いっぱい。
14/11/25 21:53:35.67 .net
GNU Coreutils Cheat Sheet
URLリンク(www.catonmat.net)

51:名無しさん@お腹いっぱい。
14/11/26 00:18:13.73 .net
tac知ってたけど有効な使い道が見いだせないでいた
しかし名前のセンスいいよな

52:名無しさん@お腹いっぱい。
14/11/26 00:36:12.96 .net
slがtacの仲間だと思って入れた時の脱力感

53:名無しさん@お腹いっぱい。
14/11/26 06:02:33.63 .net
>>46
要素ごとにもっかいrevで

54:名無しさん@お腹いっぱい。
14/11/26 06:28:19.23 .net
どうせまたBash shockのようにCoreutils shockが起こるんだぜ?
やめておけよw

55:名無しさん@お腹いっぱい。
14/11/26 06:42:34.79 .net
tac使わずに標準コマンドまたは内部コマンドだけでやれ、というのがいい詰めスクリプト問題になるなぁ。

56:名無しさん@お腹いっぱい。
14/11/26 06:48:48.66 .net
再帰すればラクショー

57:名無しさん@お腹いっぱい。
14/11/26 06:50:18.91 .net
VLIST='1 2 3'
t=; for val in $VLIST; do t="$val $t"; done

for val in $t
do
echo "$val"
done

58:名無しさん@お腹いっぱい。
14/11/26 06:51:47.26 .net
>>56 のあとに再帰すら使ってないラクショーな >>57 が書き込まれた件について

59:名無しさん@お腹いっぱい。
14/11/26 07:03:58.55 .net
再帰するならこうか。これ活用しにくい。これなら >>57 の方がいい

VLIST='1 2 3'

func()
{
if [ $# -gt 1 ]; then
(shift; func "$@")
fi
echo "$1"
}

func $VLIST

60:名無しさん@お腹いっぱい。
14/11/26 12:51:29.43 .net
未熟者のオレに>>57の動きを教えてくだせえ。。。

61:名無しさん@お腹いっぱい。
14/11/26 12:59:26.09 .net
set -x してから >>57 を実行してみると分かると思う

62:名無しさん@お腹いっぱい。
14/11/26 17:31:45.44 .net
>>57
即レスかっけー!これは濡れるw

63:名無しさん@お腹いっぱい。
14/11/26 19:08:42.67 .net
>>57が正統派に思えてくる
素直で余計なことをしていない
逆転と出力で2回forってるのが気にはなるが

64:名無しさん@お腹いっぱい。
14/11/26 20:30:20.12 .net
#!/bin/bash

VLIST='1 2 3 4 5'

val=($VLIST)

while [ ${#val[@]} -gt 0 ]; do
echo ${val[${#val[@]}-1]}
unset val[${#val[@]}-1]
done

65:名無しさん@お腹いっぱい。
14/11/26 21:05:02.38 .net
>>64
どうせbash使うなら素直にこうやれよ

#!/bin/bash

VLIST='1 2 3 4 5'
val=($VLIST)

for ((i=${#val[@]}-1; i >= 0; i--)) {
echo ${val[i]}
}

66:名無しさん@お腹いっぱい。
14/11/27 02:55:58.45 .net
どうせ10個もアイテムないだろうから

VLIST="1 2 3"
set $VLIST
for val in $9 $8 $7 $6 $5 $4 $3 $2 $1
do
echo $val
done

67:名無しさん@お腹いっぱい。
14/11/27 03:03:45.58 .net
それだったら

echo $9 $8 $7 $6 $5 $4 $3 $2 $1

でええやん…

68:名無しさん@お腹いっぱい。
14/11/27 03:42:20.68 .net
>>59
bash/zsh なら local 変数使ってこんな感じに

function reverse {
local arg="$1"
[ $# -gt 0 ] &&
{ shift; reverse "$@"; echo -n "$arg "; }
}

最後の改行はどうすべぇ…

69:名無しさん@お腹いっぱい。
14/11/27 04:05:50.71 .net
2段重ねにしてみる

function reverse {
function _reverse {
local arg="$1"
[ $# -gt 0 ] &&
{ shift; _reverse "$@"; echo -n "$arg "; }
}
_reverse "$@" | sed 's/ $/\n/'
}

70:名無しさん@お腹いっぱい。
14/11/27 12:26:34.92 .net
キモい
もっと綺麗にならんかね

71:名無しさん@お腹いっぱい。
14/11/27 13:33:00.01 .net
>>70
毎日凝視して眺める訳じゃないから
動けばいい、安定してどんな場面でも問題が起こらなければいい。
シェルスクリプトなんてそういうレベルのもの
しょせん手作業の積み上げだからね。

72:名無しさん@お腹いっぱい。
14/11/27 14:14:44.52 .net
「コードが汚くても安定して動けばいい」なんてのは
他人のコードをメンテしたり機能追加したことのない奴が言うセリフ

73:名無しさん@お腹いっぱい。
14/11/27 14:31:21.58 .net
継続してメンテしなきゃいけないスクリプトもあるし
一回動けばそれでいい使い捨てのスクリプトもある
それだけの話っしょ

74:名無しさん@お腹いっぱい。
14/11/27 14:32:04.95 .net
>>68,69 は再帰を知っていれば分かりやすいと思うけどなぁ

75:名無しさん@お腹いっぱい。
14/11/27 14:43:04.36 .net
再起知らないプログラマなんて存在しないだろ

76:名無しさん@お腹いっぱい。
14/11/27 15:06:22.08 .net
>>72
自分しか使わないマシンでも他人にメンテをお願いする
前提で書かないとならないのかい?
むしろメンテ側の人間には全く関係ない話しなんだが。

77:名無しさん@お腹いっぱい。
14/11/27 15:08:35.87 .net
>>76
一ヶ月前の自分は他人と思えって諺があってだな
個人的には自分のコードを汚く書いてしまったせいで泣くはめになったことも良くある

78:名無しさん@お腹いっぱい。
14/11/27 15:12:04.96 .net
いくらか使いこなせるようになったPerlerによくあった

79:名無しさん@お腹いっぱい。
14/11/27 15:23:18.84 .net
>>77
良い師匠に巡り会ったじゃない。
もし1ヶ月前の自分が完全無欠なら精進の可能性を断たれるな。

80:名無しさん@お腹いっぱい。
14/11/27 17:23:22.21 .net
数年前にキレイに書いたつもりのスクリプトでもメンテ(改造)めんどいお

81:名無しさん@お腹いっぱい。
14/11/27 17:40:12.56 .net
保身のため、コードはなるべく汚く、自分しか読めないように書くこと。リストラ対策。

82:名無しさん@お腹いっぱい。
14/11/27 18:27:07.18 .net
それは辞めたくなったときに困る

83:名無しさん@お腹いっぱい。
14/11/27 19:50:57.59 .net
>>81から>>82でなんか笑った

84:名無しさん@お腹いっぱい。
14/11/28 00:13:06.85 .net
>>80
書いた「つもり」だからだろ

85:名無しさん@お腹いっぱい。
14/11/28 00:35:46.31 .net
数年たちゃ腕もあがるだろうから当時の綺麗でも今の汚いなんだろうな

86:名無しさん@お腹いっぱい。
14/11/28 05:41:19.53 .net
こういっちゃなんだが何年経とうが、何日経とうが
シェルスクリプトに問題が出て治す必要があるなら
最初から書いた方が良いよ、、その時の実力で
最良のものが書ける。
1度書いた流れなら数年経っても頭に残ってるから
高速で仕上がるし、できた物を比べても大した違いは無い事も多い。

駆け出しの頃の書き物はまったく変わるのかもしれないが
それはそれで、全く変わらないと困るだろ。
過去の駄作に手をいれてジタバタしたって無駄

87:名無しさん@お腹いっぱい。
14/11/28 08:44:15.84 .net
使い捨てのつもりだったのに、長期にわたって使われた上に
「これこういう風に変えられない?」とか言われて白目になったことはある。
もちろん一般化できる話じゃないとは思うけど。

88:名無しさん@お腹いっぱい。
14/11/28 12:08:04.77 .net
改行って^Mですよね?
echo "1^M2"で2しか表示されません何故ですか?
echo "1\r2"もそうでした
echo "1\n2"はちゃんと改行されて1と2が表示されました

^M \r \nってどう使い分けるものですか?

^MはCTRL+V CTRL+Mで入力しました

89:名無しさん@お腹いっぱい。
14/11/28 12:22:58.74 .net
\rと^Mは同じでCR。
\nと^Jは同じでLF。
CRとLFの違いは自分で調べろ。

90:名無しさん@お腹いっぱい。
14/11/28 12:35:54.36 .net
CRはコンデンサと抵抗による時定数回路、
LFは低周波であることはわかりましたが、
そこから先がわかりません、よろしく女教授ください。

91:名無しさん@お腹いっぱい。
14/11/28 12:50:56.72 .net
>>90
CRとLFやタブストップなどは
機械式タイプライター由来なので、一度現物を見れば忘れない
ヤフオクで1000円くらいで手に入るから買ってみるといいよ
私女だけど

92:名無しさん@お腹いっぱい。
14/11/28 13:03:16.65 .net
Macのテキストファイルの改行コードは CR ひとつなんだっけ

93:名無しさん@お腹いっぱい。
14/11/28 13:54:56.36 .net
OSによって開業コード違いますよね。
Linuxは0xJで改行、BSDは0xMで改行しますよね。
どうしてこういう違いができたんでしょう?
簡単に返還する方法はありますか?

94:名無しさん@お腹いっぱい。
14/11/28 14:34:44.34 .net
dos2ux
これってHP依存コマンドだっけ?

95:名無しさん@お腹いっぱい。
14/11/28 14:46:02.61 .net
>>93
ある
ちょっとは調べろよ

96:名無しさん@お腹いっぱい。
14/11/28 15:13:15.53 .net
>>95
改変コピペにかまうな

97:88
14/11/28 20:10:29.27 .net
CRだと最後の文字しか表示しないってことですか?
例えば
a<CR>
b<CR>
だったらbしか表示されないってことですか?

98:名無しさん@お腹いっぱい。
14/11/28 20:11:01.93 .net
aを表示した後に行頭に戻ってbを表示している

99:名無しさん@お腹いっぱい。
14/11/28 20:12:58.92 .net
URLリンク(ja.wikipedia.org)
URLリンク(ja.wikipedia.org)
この辺の話ね。

100:名無しさん@お腹いっぱい。
14/11/28 20:20:08.06 .net
CRだとQを上げられないから、ボルフォロで正帰還かけるか、LCRにするべきだな。

101:名無しさん@お腹いっぱい。
14/11/28 20:30:52.68 .net
>>92
組み込みでもCR改行の場合がある。
LFで良いだろうぜぇ…といつも思うわ

102:名無しさん@お腹いっぱい。
14/11/28 21:00:51.14 .net
なんでこんな反応してんの?

103:名無しさん@お腹いっぱい。
14/11/28 21:47:52.95 .net
反応したら行けない理由は?
>>102に許可が射るのか?

104:名無しさん@お腹いっぱい。
14/11/28 22:03:40.21 .net
改行コードは初心者のころに誰でも一度は通る道だからねえ
その次に通る道はBOM…だったけど最近はWindows触ってないから今どうなってるのか分からん

105:名無しさん@お腹いっぱい。
14/11/28 22:38:41.11 .net
>>102
こんな反応じゃダメ?

106:名無しさん@お腹いっぱい。
14/11/28 23:06:22.07 .net
少し前に某サイトの解析スクリプト作ったときちょっと改行が面倒だった
HTMLはWindowsで作ってるらしくgrepとsedで抽出したあとCRのごみがついてることに気がついた
なのでCR削除したんだけどsambaで共有してるディレクトリに置いていたファイルを
メモ帳で開くことがあってまたぐちゃぐちゃに、まあTeraPadとかで開けばいいんだけど
環境に依存してしまうので再度CRくっ付けて解決したな

107:名無しさん@お腹いっぱい。
14/11/28 23:11:48.20 .net
改行法師ンフフ

108:名無しさん@お腹いっぱい。
14/11/28 23:48:34.23 .net
Macの標準がCRなんだよね

109:102
14/11/29 00:39:08.93 .net
質問内容稚拙だったり、回答後に更に質問したり、
そのあたりから定期的に張られる改変コピペだろうと思っただけなんだが
今回やたらみんな親切だから気になっただけだ

110:名無しさん@お腹いっぱい。
14/11/29 00:48:29.81 .net
いまのとこ改変コピペっぽいのは>>93だけだな

111:名無しさん@お腹いっぱい。
14/11/29 01:05:04.71 .net
改変コピペって・・・いつもこのスレに張り付いてんのかよ

112:名無しさん@お腹いっぱい。
14/11/29 01:37:27.48 .net
$ echo "1\r2"
1\r2

113:名無しさん@お腹いっぱい。
14/11/29 01:49:55.58 .net
$ echo -e "1\r2"

114:名無しさん@お腹いっぱい。
14/11/29 01:50:33.86 .net
$ echo $'1\r2'

115:名無しさん@お腹いっぱい。
14/11/29 06:46:31.93 .net
>>109
おそらくいつものコピペ荒らし
スレリンク(unix板:276番)

116:名無しさん@お腹いっぱい。
14/11/29 09:29:20.23 .net
>>115
その後誘導されてこっちに移動してきた

117:名無しさん@お腹いっぱい。
14/11/29 10:00:47.02 .net
誘導も移動も自作自演

118:名無しさん@お腹いっぱい。
14/11/29 10:56:38.77 .net
たぶんVimスレで誘導した奴==>>102==>>115

119:名無しさん@お腹いっぱい。
14/11/29 11:00:44.61 .net
>>112-114
これいやらしくて自分も引っかかったんだけど
>>112はshで目的の動作をしてbashだとだめなんだよな
自分はシェルがbashでスクリプトはshなんだけど
実行結果が違うから引っかかって結構悩んだ

120:名無しさん@お腹いっぱい。
14/11/29 12:05:12.75 .net
ひどい言いがかりだ

121:名無しさん@お腹いっぱい。
14/11/29 12:07:01.30 .net
まだbashなんか使ってたのかよw

122:名無しさん@お腹いっぱい。
14/11/29 12:12:50.64 .net
鉄腕bash

123:名無しさん@お腹いっぱい。
14/11/29 12:27:45.78 .net
大腕硬爆衝

124:名無しさん@お腹いっぱい。
14/11/29 13:00:19.16 .net
>>119
printfを使うか>>114のように展開するのがいいみたいね
URLリンク(fumiyas.github.io)
URLリンク(mattintosh.hatenablog.com)

125:名無しさん@お腹いっぱい。
14/12/04 14:50:44.76 .net
Xpath形式のデータを整形式にするスクリプト知りませんか?

126:名無しさん@お腹いっぱい。
14/12/05 07:55:18.64 .net
コマンドだけど xmllint

URLリンク(stackoverflow.com)
URLリンク(stackoverflow.com)

127:名無しさん@お腹いっぱい。
14/12/07 12:25:15.01 .net
1点ご質問させてください。
現在下記のようなシェルスクリプトを書いています。

trap 'echo "ERROR!!" ; exit 1' ERR

hoge 2>&amp;1 | tee test.log
hoge2 2>&amp;1 | tee test.log
hoge3 2>&amp;1 | tee test.log
hoge4 2>&amp;1 | tee test.log

コマンド結果の標準出力と標準エラー出力の両方を
ログファイルに残したいのですが
この場合、最初のコマンドで戻り値に1が返されても
次のteeコマンドで戻り値が0になってしまうため
trapで適切にエラーハンドリングできない状態です。

pipestatus使えば何とかなりそうなのですが
その場合コマンドを実行するたびにif文で
pipestatusを評価する必要があるため、冗長に感じてしまいます。

そのためもしより良い解決方法がありましたらご教授いただけませんか。

128:名無しさん@お腹いっぱい。
14/12/07 12:45:10.31 .net
function にしてみるとか

err_and_exit () {
trap 'echo "ERROR!!" ; exit 1' ERR
eval "$@"
}

err_and_exit 'hoge' 2>&1 | tee test.log

129:名無しさん@お腹いっぱい。
14/12/07 13:35:25.85 .net
>>127
全部まとめて tee して、コマンドは &amp;&amp; でつなげばエラーがあれば途中で打ち切ってくれるよ。

( hoge &amp;&amp; hoge2 &amp;&amp; hoge3 &amp;&amp; hoge ) 2>&amp;1 | tee test.log

130:129
14/12/07 13:37:42.00 .net
amp化けやだー 全角&で書き直すわ

( hoge && hoge2 && hoge3 && hoge4 ) 2>&1 | tee test.log

131:名無しさん@お腹いっぱい。
14/12/07 17:01:01.11 .net
set -eじゃダメなのか?

132:名無しさん@お腹いっぱい。
14/12/07 17:03:41.55 .net
>>127
#!/bin/bash
exec > >(tee test.log) 2>&1
trap 'echo "ERROR!!" ; exit 1' ERR
hoge
hoge2
hoge3
hoge4

133:名無しさん@お腹いっぱい。
14/12/07 17:16:16.20 .net
>>131

set -e
false | true

echo 'set -e してもパイプ下流が真だと終了しないよw'

134:名無しさん@お腹いっぱい。
14/12/07 21:22:56.83 .net
>>128>>129>>132
お礼が遅くなりましたが、ご回答ありがとうございました。
今回用途としてはコマンドを実行してエラーが発生した段階で
スクリプトを終了させたかったため、下記のような記述に変更しました。

(hoge && hoge2 && hoge3 && hoge4 ) 2>&1 | tee test.log
[ ${PIPESTATUS[0]} - ne 0 ] && exit 1

hoge5
hoge6

>>127と比べると「tee test.log」の重複した記述もなくなったので
少しすっきりしたように感じます。
良い解決方法を教えていただき、ありがとうございました。

135:名無しさん@お腹いっぱい。
14/12/11 09:38:51.84 .net
>>86
なんだか勇気づけられた
ありがとう

136:名無しさん@お腹いっぱい。
14/12/12 12:07:03.36 .net
もう1週間も悩んでいるのに解決せず、ぜひ皆さんのお知恵を
かしてください。

テキストの処理で、数千kBほどのテキストファイルをスクリプト
で処理したいと思っています。環境はCENTOS6.5(i686,32ビット)
で、シェルはBASHです。

シェルスクリプトの最初の方で得られた変数があり、これは動的に変化
します。
START="`grep start`"(←実際はgrepのあとにも処理あり)
END="`grep end`"
二つには行番号が入っており、これをsedのアドレスの指定に使って
START行からEND行までを削除させたいのです。この段階でデバグ
のため、START、ENDともスクリプト途中にechoで表示させて値が
きちんと入っているのを確認しています。

具体的には
sed -e "$START,$ENDd" /dir/file
を実行させても、sedは「,」が未知のコマンドです、と言ってき
ます。
sed -e "${START},${END}d" /dir/file
でも
sed -e '"${START}","${END}"d' /dir/file
でも駄目でした。sedが$を最終行と勘違いしているのかと
sed -e "\$START,\$ENDd" /dir/file
としてみても、これも駄目でした。

そもそも、sedのパラメータには変数は使えないのでしょうか?
同じ事がスクリプト中でできれば、sedでなくても構いませんが。
他におもいつきません。
ネットを検索すると、sedの置換(sed 's/$A/$B/'とか)ではそ
ういう例もあるようですが。よろしくお願いします。

137:名無しさん@お腹いっぱい。
14/12/12 12:30:40.72 .net
>>136

sed ${START},${END}d /dir/file

で行けるよ。

変数 START ENDに余分なスペースが入ってないか注意。
スペース取るには、

START=`echo $START`
END=`echo $ECHO`
で、代入し直す。

138:名無しさん@お腹いっぱい。
14/12/12 12:34:18.14 .net
ダブルクォートで囲っちゃえばいいんじゃない

sed "${START},${END}d" /dir/file

139:名無しさん@お腹いっぱい。
14/12/12 12:39:48.69 .net
START=1
END=2

printf "foo\nbar\nbaz\n" | sed "${START},${END}d"
=> baz

printf "foo\nbar\nbaz\n" | sed " ${START} , ${END} d"
=> baz

140:名無しさん@お腹いっぱい。
14/12/12 12:44:39.31 .net
>>136
> sedは「,」が未知のコマンドです、と言ってき

これ、START 変数が undef か空っぽ("")なんじゃない?
set -x してからスクリプトを実行してみて確かめたほうがいいよ。

141:名無しさん@お腹いっぱい。
14/12/12 12:45:54.06 .net
エスパーすると $START とかに 全角スペース が入ってるw

142:名無しさん@お腹いっぱい。
14/12/12 12:55:10.57 .net
なるほどw

143:名無しさん@お腹いっぱい。
14/12/12 13:05:14.93 .net
$ printf "foo\nbar\nbaz\n" | sed ",2d"
sed: -e 表現 #1, 文字数 1: 未知のコマンドです: 「,」

144:名無しさん@お腹いっぱい。
14/12/12 14:02:50.73 .net
>>136 です。

やさしきみなさん、コメントありがとうございます。
これからいじくってみて、あとで結果報告いたします。

145:名無しさん@お腹いっぱい。
14/12/12 14:35:13.48 .net
>>136 です。

デバグ用の

echo $START
echo $END

の直後に、

START=`echo $START`
START=`echo $END`

を追加して実行したところ、な、な、なんと!
思い通りの結果が得られました。この一週間悩んだのが
たった2行の追加でクリアされました。なんかポカーン状態
ですが。。。

画面上では空白が入ってないように見えただけかもしれま
せん。>>137 さん助かりました。ありがとうございます。

>>139 さんの書かれたprintf文、参考になりました。まずこ
れを試してみるべきでしたね。

146:名無しさん@お腹いっぱい。
14/12/12 14:52:02.24 .net
たぶん後ろに改行が入ってたんじゃないかな
^Mのやつ

147:名無しさん@お腹いっぱい。
14/12/12 15:06:40.30 .net
^Mですか。結構、ネット上には^Mを消すという記事がありますね。
これのことだったのか、がてんいきました。

148:名無しさん@お腹いっぱい。
14/12/12 15:38:25.84 .net
^M だと、
START=`echo $START`
やっても^Mは取れないから、違うと思うぞ

149:名無しさん@お腹いっぱい。
14/12/12 18:17:01.24 .net
シェルスクリプトはXMLのDOM操作のようなことはできないんですか?
あいだに要素を追加したりとか

150:名無しさん@お腹いっぱい。
14/12/12 19:08:12.46 .net
要素って具体的に何?

151:名無しさん@お腹いっぱい。
14/12/12 19:58:42.72 .net
>>149
やればできると思うが、結構面倒だしな

>>150
テキスト要素とかタグ要素とか

152:名無しさん@お腹いっぱい。
14/12/12 20:44:30.25 .net
>>149
xslt使えよ

153:名無しさん@お腹いっぱい。
14/12/13 00:48:34.76 .net
シェルスクリプトで、XMLのDOM操作をしたいってことなのか
「のようなこと」ってあるから別の何かかと思った
使ったことは無いんだけど、XMLgawkが便利そう

154:名無しさん@お腹いっぱい。
14/12/13 03:47:01.58 .net
XML Starletとか

155:名無しさん@お腹いっぱい。
14/12/15 19:52:22.36 .net
dashってのがあったんだ。
知らなかった。。。ash系なのか、ダッシュ島系なのか

156:名無しさん@お腹いっぱい。
14/12/15 20:11:02.18 .net
農家専用プログラミング言語

157:グールドの著作を読むなら原書で
14/12/16 15:34:56.67 .net
1993年に慶応藤沢で書いたc shellプログラムです。fingerの結果から名字を省いて名前だけローマ字表示で取り出しHi xoxo!とするプログラム
#!/bin/csh -f

### Compact wise program that extracts user's first name only from result of "finger" command on UNIX without any Admin rights ###
set who = `finger -m $user`
echo -n ' Hi '"$who[7]" echo '\!' (= Hi YOURNAME!)
# First name comes at 7th place divided by spaces

当時の基準で採点してみてください。当時はこういうユーザフレンドリなプログラム見かけなかったんだけど。環境が違えばあったのかな?

158:名無しさん@お腹いっぱい。
14/12/16 17:02:19.69 .net
>>157
1993年ってもうSVR4とかある時代だからそんなに古くないし、スクリプト内容も見所がない。
何を採点して欲しいやら。

強いて言うと、
cshスクリプト - 大減点
echoコマンドを2回に分ける必要ない - 減点
echoコマンドのところ改行のコピペミス?
fingerコマンドの出力って環境によってたぶん違うよ。

ちなみにこちらの環境では finger の 4番目の位置にファーストネームが入る。

#!/bin/sh

set `finger -m $USER`
echo ' Hi '"$4"'!'

159:グールドの著作を読むなら原書で
14/12/16 17:23:03.61 .net
>>158
echoコマンドはこういう遣り方じゃないと勝手に改行が入って苦労しました。
!も特殊文字扱いだったということでしょう。
それはさておきいちいちwhoとか名前付けてsetしなくてよいということですね。
こういうプログラムって当時からやってました?
sfcって遅れたキャンパスだったので、他大学の工学部などでは常識でも
あのキャンパスでは非常識ということも多々あるかと思います。
とにかくHi [first name]っていうプログラムを動かしてたのは学内で自分だけでした。
プログラムの全体はLaTeXをエクステンション除いたファイル名だけ打ち込めば
任意のプリンタから自動印刷できるという内容なんですがね。

160:名無しさん@お腹いっぱい。
14/12/16 17:28:04.57 .net
昔話がしたいの?

161:グールドの著作を読むなら原書で
14/12/16 17:38:54.20 .net
他キャンパスでは当時どうだったか知りたいだけ。これってアドミン権限除いた
基本的な構造はAmazon.comなどで金になってる商売だから。

162:名無しさん@お腹いっぱい。
14/12/16 17:51:39.82 .net
1993年ならUNIXとしては遅い方。
どこにでも普通に転がってるスクリプトだし、なんの変哲もないヘボスクリプトの何を評価しろとw

163:グールドの著作を読むなら原書で
14/12/16 17:54:06.78 .net
このスクリプトの特許持っている人ってどの国の何ていう人で取得年は何年?

164:名無しさん@お腹いっぱい。
14/12/16 17:54:28.41 .net
なんで特許持ってる前提になってんの?

165:グールドの著作を読むなら原書で
14/12/16 17:58:23.52 .net
金になるアイデアには特許が付き物でしょう。Amazon.comだって誰かに金払ってるでしょ。

166:名無しさん@お腹いっぱい。
14/12/16 18:23:54.80 .net
もしかして、root権限がなくても/etc/passwdのフルネームフィルドが読める手法がすごい、って言ってるの?
/etc/passwdは一般ユーザーでももともと読めるし、(たとえshadowでもパスワード部分以外は)
NIS使ってるならypcat passwdは一般ユーザーでもできるし。
何の新規性もない。

167:グールドの著作を読むなら原書で
14/12/16 18:38:28.60 .net
>>166
そうではなくて、大したことの無いアイデアが金になることがある、ということを強調している。
Amazon.com等々が誰かに金を払っているのは事実の筈だし。無論アドミン権限の中のプログラム
であってもデータから抜き出す作業は同じ。で、Amazonとかできた当初はHi某とか言ってこなかった
筈なので、そこら辺の経緯を知りたいわけ。日本語では英語名で抜き出すのは日本語名で抜き出す
よりは厄介な筈。他に方法いくらでもあるから。

168:名無しさん@お腹いっぱい。
14/12/16 18:43:25.43 .net
スレ違い。

169:名無しさん@お腹いっぱい。
14/12/16 20:12:06.60 .net
「俺が始めてだ、すげーだろー」は、その時点で主張しなけりゃ何の意味もない

ちなみにBBSにおいてユーザーの識別子として一方向ハッシュを表示する手法を、提唱したのは俺だ。

170:名無しさん@お腹いっぱい。
14/12/16 21:46:14.47 .net
>>167
そこまで知りたいなら調べて報告してくれ
おしえてクンじゃなければね

171:名無しさん@お腹いっぱい。
14/12/17 00:10:11.34 .net
>>167
> Amazon.com等々が誰かに金を払っているのは事実の筈だし。

まず、このソースを出してくれ

172:名無しさん@お腹いっぱい。
14/12/19 14:14:12.27 .net
mksh; MirBSD Korn Shell
ってのがあったんだ。
知らなかった。。。ash系なのか、ダッシュ島系なのか

173:名無しさん@お腹いっぱい。
14/12/23 07:08:11.72 .net
おっさんそんな調子で年越せんのか
しっかりしろ

174:名無しさん@お腹いっぱい。
14/12/25 17:52:08.23 .net
さあ、クリスマスだよ。
学生さんは冬休みに、買ってもらった
Mac, iPhone, android でシェルスクリプトを書いて遊ぼう!

175:名無しさん@お腹いっぱい。
14/12/25 18:54:27.87 .net
買ってもらった?
学生なら自分で買うわ。

生徒や児童なら買ってもらうかも知れんが。

176:あ
14/12/25 19:32:27.25 .net
/:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::ヽ
    /:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::://ヽ:::::::::::::::|
    l:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::// ヽ::::::::::::::l
    l:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::/:::「'ヽ::::::::::://   ヽ:::::::::::|
    |::::::::::::::::::::::::::::::::::::::::::::::::::::::::::ノl:::ノ l:::::::/      ヽ::::::::|
   ノ:::::::::::::::::::::::::::::::::::::::::::::::::::::/ ゙゙  ノ:::/ ,,;;;;;;,,    ,,,,ヽ:::::l
   ):::::::::::::::::::::::::::::::::::::::::::::::/    ノ/ __,'''i: ('''__):::l  
  )::::::::::::::::::::::::::::::::::::::::::::::::::/         ̄ ̄ン:. :「 ̄`ヾ   
 1:::::::::::::::::::::::「 `┤l:::::::::::::::::l          ̄   ,  ヽ ̄ l   
  `l:::::::::::::::::::::ヽ  :l li:::::::::::::/        ヽ  /´   `l  |
  ヽ::::::::::::::::::::::\_」 lヽ::::/         .l  !:-●,__ ノ  /      
  ノ:::::::::::::::::::::::::::ノ | l `゙゙           i ,,;;;;;;;;;;;;;;;;;;;;,  /ヽ       
,/ ヽ::::::::::::::::::::::(  l l::::::::..         /.:''/´ ̄_ソ  /  `ヽ
     ヽ:::::::::::::::ヽ | l:::::::::::...      /::// ̄ ̄_ソ  /    \   ヴッ!!
        ヽ:::::::\| l::::::::::::::::...    / :::.ゝ` ̄ ̄/ /       ヽ
           ヽ:::l l:::::::::::::::::::..      ̄ ̄;;'' /         ヽ
              l l;;;;;;:::::::::::::::.....;;;;............;;;;;;''ノ            l
              l l '''''''''''''''''''''''''''''''''''''' ̄l |             |

URLリンク(www.youtube.com)

177:名無しさん@お腹いっぱい。
14/12/26 09:25:20.89 .net
スレ違いかもだけど。。。
cronでスクリプト最速で回すとすると
* * * * * /home/user/hoge.sh
だけど、これ以上の頻度というか速度で実行できないのかな。
無限ループ覚悟で、hoge.shの最後に自分自身をコールするとか。

178:名無しさん@お腹いっぱい。
14/12/26 09:36:37.85 .net
自分自身でまわすならcronからは1回でいいじゃん

179:名無しさん@お腹いっぱい。
14/12/26 09:36:40.46 .net
>>177
何かの待ち受けイベントチェックか?

普通にsleep 1とかしながらループすればいいじゃん。cron必要なし。
自分自身をコールするするのは無駄だからwhile :; do hoge; sleep 1; done で無限ループな。

180:名無しさん@お腹いっぱい。
14/12/26 09:55:10.70 .net
*じゃなく*だ。

181:名無しさん@お腹いっぱい。
14/12/26 10:01:04.07 .net
>>179
そうです、自宅鯖で、smtpからweb、ssh、イベント監視まで
全部やらせてるマシン。あんまとっぴなことすると、落ちそう
なので。sleep入れれば、変な挙動はなくなりそうですね。
感謝!

182:名無しさん@お腹いっぱい。
14/12/26 12:23:03.31 .net
>>179さんの助言をそのまんまパクリ、

さっそくcronをやめて、do while ( `nantoka` ) done方式に変更。
前にcase文をつけてstart、stop、resartで起動、停止
できるようにした。sleep_secは10秒。これで様子みます。

しかし、良スレですね、ここは。いつも助けていただき感謝です。

183:名無しさん@お腹いっぱい。
14/12/26 12:27:53.31 .net
ここの住人のかたがたは皆さん知ってるだろうけど
今浦島な私には、pgrep、pkillというコマンドが使える
のが素晴らしいと思いました。(最近知った)
なんか昔は、kill -9 `pidof nantoka`とかやってたのが
なつかしいというか。

184:名無しさん@お腹いっぱい。
14/12/26 13:13:19.56 .net
話続けるなら名前欄にレス番入れてよ。

185:名無しさん@お腹いっぱい。
14/12/27 13:16:10.86 .net
>>179
conky使ったりatに登録したりしてまわさなくても、
単純にそれで良かったんだなあ。

186:名無しさん@お腹いっぱい。
14/12/31 06:28:21.74 .net
さあ、大晦日だよ。
学生さんは冬休みに、買ってもらった
Mac, iPhone, android でシェルスクリプトを書いて遊ぼう!

187:名無しさん@お腹いっぱい。
14/12/31 13:02:42.92 .net
iPhoneでどうやって書けるの?

188:名無しさん@お腹いっぱい。
14/12/31 13:58:30.05 .net
URLリンク(ideone.com)

189:名無しさん@お腹いっぱい。
14/12/31 19:47:38.53 .net
書くだけでなく、走らせて結果を見れるやり方
ただ調べた結果だけなので自己責任で

* インターネットブラウザーのjavascript上で走るLinuxで
 URLリンク(bellard.org)

* もしくは、インターネットブラウザーでwebアプリ
 URLリンク(ideone.com)
 URLリンク(www.tutorialspoint.com)

* もしくは、sshで他マシンにアクセス
 試した事はないけど、学習用のFree UNIX Shell Accountsとかもある
 URLリンク(freeshell.org)

* Jailbreak

190:名無しさん@お腹いっぱい。
15/01/01 17:27:22.86 .net
ggl 検索文字列
でw3mを使って検索文字列でググる要にしているのを拡張したい

具体的には
コピーしてクリップボードの中に入ってる文字で検索しようと思う

それ自体は簡単なのだけど、問題は --clipboard や -c のオプションを付けた時に実行されるのか、(ggl -c)
それとももっとルーズに (ggl) と引数無しの状態で実行するか悩んでいる

オプションとかのガイドラインてある?
例えば -l はリスト(at -l など)で使うとか、多くのコマンドは
引数がない時は -h オプションと同じように簡単な説明がでるとかのメジャーなガイドライン

191:名無しさん@お腹いっぱい。
15/01/01 18:19:12.95 .net
GNUにはあった気がする

192:名無しさん@お腹いっぱい。
15/01/01 18:26:54.79 .net
引数ないときは「クリップボードから」なんて慣習は存在しない。

193:名無しさん@お腹いっぱい。
15/01/01 18:29:20.31 .net
興味があったのでちょっと検索してみた。
ガイドラインというのはわからないが、こんな感じで使われてるね~みたいのなら、

URLリンク(catb.org)

> The -a to -z of Command-Line Options
>
> Over time, frequently-used options in well-known Unix programs have established a loose sort of semantic standard
> for what various flags might be expected to mean. The following is a list of options and meanings that should prove
> usefully unsurprising to an experienced Unix user:

URLリンク(www.gnu.org)

> 4.9 Table of Long Options
>
> Here is a table of long options used by GNU programs. It is surely incomplete, but we aim to list all the options that
> a new program might want to be compatible with. If you use names not already in the table, please send
> bug-standards@gnu.org a list of them, with their meanings, so we can update the table.

194:名無しさん@お腹いっぱい。
15/01/01 20:15:18.38 .net
>>191-193
サンキュー

URL先の情報にぴったりのオプション見つからないから
-h を少し書いて後々忘れた時に備えて、
デフォルトでクリップボードで検索、
引数あるときはそれで検索にする

195:名無しさん@お腹いっぱい。
15/01/01 22:28:20.83 .net
両方用意すればいいんじゃない?
自分の名前がgglかgglcかで動作が変わるのも面白そう。

196:名無しさん@お腹いっぱい。
15/01/01 22:31:09.64 .net
名前同じで動作変わるとmanの括弧書きの数字が増えてややこしいみたいな?

197:名無しさん@お腹いっぱい。
15/01/03 21:18:53.70 .net
そういやgetopt(3)ってPOSIXで規定されてるんだね。いまどきの
*BSD, Linuxならlibcで持ってるものなんだな。

とあるソフトがGNUのgetopt.cを同梱しているので消してやりたいと思って
いたんだけど、configureでgetoptの存在チェックしてlibcの方を優先して
使わせるようにするのがいいのかな。

198:名無しさん@お腹いっぱい。
15/01/08 11:56:42.54 .net
「とあるソフト」がGPLなら、一部を削除するのはライセンス違反。

199:名無しさん@お腹いっぱい。
15/01/08 12:01:18.92 .net
>>198
なんで?

200:名無しさん@お腹いっぱい。
15/01/08 12:15:36.60 .net
GPL V3
4. Conveying Verbatim Copies.
5. Conveying Modified Source Versions.

201:名無しさん@お腹いっぱい。
15/01/08 13:17:19.27 .net
>>200
詳しく

202:名無しさん@お腹いっぱい。
15/01/08 18:53:35.81 .net
質問です
22, 32, 33, 45,
12, 47, 78, 44, 32,
...
数字がカンマで区切って700個書いてあるファイルがあります。
一行に数字が何個あるか規則性はありません。
このファイルを読み込んで数字を100個ずつ出力して7枚のファイルを
作りたいと思っています。シェルスクリプトでうまくできますでしょうか。
出力されたファイルには数字が一列で入っているほうがいいです。
お願いします。

203:名無しさん@お腹いっぱい。
15/01/08 19:41:16.46 .net
GNU awk 限定

awk -v RS='' -v FPAT='( *[0-9]+, *\n?){1,100}' \
'{
for(i=1;i<=NF;i++){
gsub(" *\n"," ",$i);
gsub(", *$","",$i);
print $i > i ".txt";
}
}' a.txt

上手く行けば 1.txt ... 7.txt というファイルができるはず

204:名無しさん@お腹いっぱい。
15/01/08 20:20:07.70 .net
gawk じゃなくてふつーの awk で。

awk -v RS=, '{print $0+0 > int(NR/100)+1 ".txt" }'

205:名無しさん@お腹いっぱい。
15/01/08 20:36:37.66 .net
int((NR-1)/100)+1 じゃないとダメだった。

206:203
15/01/08 20:51:41.18 .net
あ、カンマはいらないのね

207:203
15/01/08 20:56:03.24 .net
なおかつ1列を1行と読み間違えていた(´・ω・`)ショボーン

208:名無しさん@お腹いっぱい。
15/01/08 21:09:50.76 .net
ファイル分割が有るし、awkでやる方が良いだろうけど、sedで
見易さの為-r付けてます

#!/bin/sh
sed -re '
 :loop;
 $! {
  N;
  b loop;
 }

 s/,[ \n]+/, /g;
 s/([0-9]+, ){100}/&\n/g;
' | {
 i=1
 while read line
 do
  echo "$line" > "$(( i++ )).txt"
 done
}

209:名無しさん@お腹いっぱい。
15/01/08 21:43:46.83 .net
awkもsedも出ちまったか

tr -d '\r\n' < file

210:名無しさん@お腹いっぱい。
15/01/08 21:52:48.42 .net
set -- `sed 's/,/ /g' input.txt`
i=1
while [ $i -le 7 ]; do
(j=1; while [ $j -le 100 ]; do echo "$1"; shift; done) > $i.txt

211:209
15/01/08 21:57:31.95 .net
ミス

tr -d '\r\n' < file | tr ',' '\n' | split -l 100

212:名無しさん@お腹いっぱい。
15/01/08 21:58:20.67 .net
考えてる途中で送っちゃった。やり直し

set -- `sed 's/,/ /g' input.txt`
i=1
while [ $i -le 7 ]; do
(j=1; while [ $j -le 100 ]; do echo "$1"; shift; j=$((j + 1)); done) > $i.txt
shift 100
i=$((i + 1))
done

213:209
15/01/08 22:01:45.08 .net
>>212
お前は俺か

214:名無しさん@お腹いっぱい。
15/01/08 23:07:34.58 .net
/ *, */を改行に変換してhead

215:名無しさん@お腹いっぱい。
15/01/09 00:45:24.74 .net
#!/bin/sh
file=`cat "$1"`
for i in `seq 1 7`; do
for j in `seq 1 100`; do
echo -n ${file%%,*}, >>$i.txt
file=${file#*,}
done
done

216:名無しさん@お腹いっぱい。
15/01/09 01:53:20.06 .net
GNU grep and GNU parallel

$ grep -Po '[0-9]+' data.txt | parallel --pipe -L 100 -n 1 -k 'cat - > {#}.txt'

217:名無しさん@お腹いっぱい。
15/01/09 01:59:25.49 .net
211と216を足して

$ grep -o '[0-9]\+' data.txt | split -l 100

218:名無しさん@お腹いっぱい。
15/01/10 02:47:23.50 xezKGq2J7
.net が書き込めなくなったな
とりあえずscから見ているが

219:202
15/01/11 18:59:23.53 .net
>>203-217
ありがとうございます。本当に助かりました。
勉強不足を痛感。向上心を刺激されました。

220:名無しさん@お腹いっぱい。
15/01/14 13:42:56.50 .net
$SEARCH に入れても awkが動いてくれません
{}が引っかかってしまったのだろうか? どうすればよいのだろうか?

while true
do read SEARCH
awk 'BEGIN{RF="---"}/${SEARCH}/' $save_to
done

221:名無しさん@お腹いっぱい。
15/01/14 13:55:03.85 .net
シングルクォートで囲まれてるから置換されないのよ

222:名無しさん@お腹いっぱい。
15/01/14 14:41:45.54 .net
>>221
多少書き換えてみました
しかし、まだ動きません

clp.sh
do read SEARCH
export SEARCH
awk -f ~/sbin/h_Searher.awk $save_to
done

~/sbin/h_Searher.awk
BEGIN{RF="---"}/$SEARCH/

223:名無しさん@お腹いっぱい。
15/01/14 17:08:45.99 .net
perlで書いてしまった
たった1行のためにつまずくとは悔しい

do
 perl ~/Perl_instance/clp.pl
done


~/Perl_instance/clp.pl
open FH, '<', '$save_toと同じファイル';
my @LOG = <FH>;
close FH;

my $sentence = join ' ', @LOG;
my @field = split /---/, $sentence;

# my $search = "Ano";
chomp(my $search = <STDIN>);
for my $lines (@field) {
  if ( $lines =~ m/${search}/ ) {
    print "---\n";
    print "$lines\n";
  }
}

224:名無しさん@お腹いっぱい。
15/01/15 10:05:06.27 .net
>>220
awk 'BEGIN{RF="---"}/'${SEARCH}'/' $save_to

225:名無しさん@お腹いっぱい。
15/01/15 12:37:55.02 .net
>>224
thanks!

226:名無しさん@お腹いっぱい。
15/01/15 13:19:56.10 .net
そして、$SEARCHにインジェクションされましたとさ。

227:名無しさん@お腹いっぱい。
15/01/15 18:30:18.23 .net
GNU awk ならこんなのも

awk -v SEARCH="$SEARCH" 'BEGIN{RF="---"}/SEARCH/' $save_to

228:名無しさん@お腹いっぱい。
15/01/20 01:40:59.45 .net
こんな雑誌があることを初めて知った。
なんと月刊で20号以上出ているということにも驚いた。

シェルスクリプトマガジン vol.21
URLリンク(www.amazon.co.jp)
URLリンク(www.usp-lab.com)

229:名無しさん@お腹いっぱい。
15/01/20 05:22:18.17 .net
その雑誌の半分はシェルスクリプト関係ない内容だから相当ネタがないんだろなって思った

230:名無しさん@お腹いっぱい。
15/01/21 01:45:14.76 .net
ツールドフランスの実況が森の景色の解説になってるようなもんか

231:名無しさん@お腹いっぱい。
15/01/22 16:29:19.37 .net
コマンドラインから手入力するとちゃんと動くスクリプトが、cronからだと動かない。
数日悩んだ結果。。。原因はLANGだった

232:名無しさん@お腹いっぱい。
15/01/22 16:32:53.58 .net
ルンゲの罠

233:名無しさん@お腹いっぱい。
15/01/22 16:48:29.41 .net
>>231
まれによくある。

スクリプトの先頭付近でLANGを設定しちゃうことも多いんだけど、Unix的でクールな
ポータビリティのある手法を紹介してくれる偉い人が出てくるのを正座して待ちたい。

234:名無しさん@お腹いっぱい。
15/01/22 17:14:56.12 .net
LANG=C

235:名無しさん@お腹いっぱい。
15/01/23 06:42:51.72 .net
偉い人が
 共通したものは crontab 先頭で、タスク毎のは env NAME=VALUE COMMAND
と答えるか、もうまるっきり答えないと予想した

236:名無しさん@お腹いっぱい。
15/01/23 10:00:16.40 .net
共通したものは crontab 先頭で、タスク毎のは env NAME=VALUE COMMAND

237:名無しさん@お腹いっぱい。
15/01/23 16:52:05.70 .net
偉い人のコピペ北ー!
自演っぽくて、コメントしづらい輪

238:名無しさん@お腹いっぱい。
15/01/23 17:30:03.53 .net
この話はここで終わりって暗に言ってるんだろう

239:名無しさん@お腹いっぱい。
15/01/24 10:11:24.87 .net
LANG=C sl
的な書き方ってどこまで有効なのかな?
bashだけ?

240:名無しさん@お腹いっぱい。
15/01/24 10:23:49.81 .net
>>239
bourne shell でも使える

241:名無しさん@お腹いっぱい。
15/01/24 15:26:45.88 .net
配列の命名規則ってある?

242:名無しさん@お腹いっぱい。
15/01/24 15:41:53.70 .net
ない

243:240
15/01/25 04:39:03.74 .net
みんなはどうしてる?
しっくりくる表記法がないんだけど

244:名無しさん@お腹いっぱい。
15/01/25 05:18:01.83 .net
しっくりこない表記がワカラナイ

245:名無しさん@お腹いっぱい。
15/01/25 11:18:23.60 .net
配列は邪教
使わないので規則などない

246:名無しさん@お腹いっぱい。
15/01/25 11:45:02.72 .net
>>245
同意

247:名無しさん@お腹いっぱい。
15/01/25 12:36:31.55 .net
配列って変数名に連番を入れたりして使うことかと思ってたw

248:名無しさん@お腹いっぱい。
15/01/25 13:47:36.00 .net
>>245,245
じゃあ代わりにどうすればよいのだ?
まさかコピペ?

249:名無しさん@お腹いっぱい。
15/01/25 17:38:43.45 .net
ポインタとか言い出すと見た

250:名無しさん@お腹いっぱい。
15/01/25 19:40:14.84 .net
あほらし

> じゃあ代わりにどうすればよいのだ?
> ポインタとか言い出すと見た
いかにも、めんどくさそう

251:名無しさん@お腹いっぱい。
15/01/25 19:46:57.10 .net
会話するネタがないんだなぁ……

252:名無しさん@お腹いっぱい。
15/01/25 21:21:36.60 .net
じゃあおれからネタ
xargsコマンドが好き。無理だと思ってた処理がワンライナーになる
いっそ、powershellみたいにjsonパイプラインみたいなのがあればいいのにって思う

253:名無しさん@お腹いっぱい。
15/01/25 22:41:49.00 .net
俺がよく使うのはfind ... | xargs grep だったかな
他どんな場面で使うっけ

254:名無しさん@お腹いっぱい。
15/01/25 23:37:38.84 .net
\ls -1t *.* |head -3|xargs head

255:名無しさん@お腹いっぱい。
15/01/26 12:06:00.33 .net
>>236

*.*の3行が、headへの標準入力じゃなくて、引数として与えられるのか。
おもしろいなあ。

256:名無しさん@お腹いっぱい。
15/01/26 20:35:10.75 .net
xargs で何か面白い事は無いかと、あれこれ考えた結果
ループになる
xargs loop で検索したら結構見つかるので
珍しくは無いんだろうが、まあ、一応

<<EOF xargs -I i sh -c 'seq 3 | xargs -I j echo i j'
foo bar
baz qux quux
corge
grault
EOF

257:名無しさん@お腹いっぱい。
15/01/27 02:26:05.37 .net
xargs は並列処理でもよく使うかな
例えば find ... | xargs -P 12 -n 16 gzip とすると12プロセスがファイルの圧縮を行う

258:名無しさん@お腹いっぱい。
15/01/27 03:09:32.08 .net
\nをファイル名に仕込まれて爆死する

259:名無しさん@お腹いっぱい。
15/01/27 06:47:01.92 .net
find ... -print0 | xargs ... -0 ... ってしとけばええやん…

260:名無しさん@お腹いっぱい。
15/01/27 07:02:05.92 .net
\0をファイル名に仕込まれて(ry

261:名無しさん@お腹いっぱい。
15/01/27 07:38:50.39 .net
仕込めるんだっけ?

262:名無しさん@お腹いっぱい。
15/01/27 08:17:49.81 .net
find ‥ -print0 を知らん奴もいるんだな w

263:名無しさん@お腹いっぱい。
15/01/27 08:20:05.07 .net
>>261
API だと思い付かない
ディスクを直接バイナリ編集すれば可能かも

264:名無しさん@お腹いっぱい。
15/01/27 08:25:13.28 .net
>>262
実装によってはないのよ

265:名無しさん@お腹いっぱい。
15/01/27 08:28:26.16 .net
solarisにはまだない

266:名無しさん@お腹いっぱい。
15/01/27 12:18:24.66 .net
>>264
移植すりゃいいじゃん

267:名無しさん@お腹いっぱい。
15/01/27 12:56:34.51 .net
大抵は
-exec {} +
で用が足りる

268:名無しさん@お腹いっぱい。
15/01/27 13:01:19.27 .net
>>263
カーネル内でもファイル名は0終端で扱ってるから無理だね
実際のサイズと異なる事でカーネルクラッシュなどまずいことが発生する可能性は
あるけど、それは普通にカーネル内バグ

269:名無しさん@お腹いっぱい。
15/01/27 13:29:38.19 .net
>>266
そういう話じゃないよ

270:名無しさん@お腹いっぱい。
15/01/27 13:41:29.10 .net
>>269
半分冗談だよ、いちいち気にしてたら禿げるぞ

271:名無しさん@お腹いっぱい。
15/01/27 13:43:51.02 .net
冗談に見えないし、
冗談だとしても面白くないよ

272:名無しさん@お腹いっぱい。
15/01/27 15:15:56.23 .net
大抵は
-exec \{\} +
とエスケープなりクォートで囲むなりするのを忘れる

273:名無しさん@お腹いっぱい。
15/01/27 16:27:07.47 .net
{}をquoteしなきゃならないカタワ専用シェルって何?

274:名無しさん@お腹いっぱい。
15/01/27 21:10:27.07 .net
-execはなんか怖いんだよなぁ
理由はないんだけど

275:DAEMON
15/01/27 21:45:21.58 .net
>>273
 シ
タッ・・(Φ Φ+)・・・ 恐らく Perl です

276:DAEMON
15/01/27 22:02:58.78 .net
>>275
 シ
タッ・・(Φ Φ+)・・・ 例えば、基礎公文で…

while (test) {
       open test-file.txt(filehandle) ,
          ">test-file.pl"
       print test-file.txt
    close test-file.txt
}

斯様な様にですか…

277:名無しさん@お腹いっぱい。
15/01/28 00:14:24.97 .net
>>272
で、{}をクォートする必要があるシェルって何?

278:名無しさん@お腹いっぱい。
15/01/30 19:56:12.76 .net
wait入れるsleepだが、引数が整数だけだろと思ってたら、整数じ
ゃなくてもいいというので、0.1入れてやってみたら、ほんとに動
作してるっぽい。manには何も書いておらん。つかえねーman

279:名無しさん@お腹いっぱい。
15/01/30 20:00:01.61 .net
うちのsleepはGNUだけど man sleep すると info 見ろって書いてあって、info 見たら:
Historical implementations of `sleep' have required that NUMBER be
an integer, and only accepted a single argument without a suffix.
However, GNU `sleep' accepts arbitrary floating point numbers (using a
period before any fractional digits).

280:名無しさん@お腹いっぱい。
15/01/30 21:57:35.82 .net
>>279
おお、サンクス

281:名無しさん@お腹いっぱい。
15/01/31 12:09:54.06 .net
>>274
客先環境での操作なんかだとおおいにある
xargsなら、-pとか-tがあるので安心

282:名無しさん@お腹いっぱい。
15/01/31 13:19:36.31 .net
>>281
同意が得られて異端じゃないと安心出来た
尚就職してから今まで客先環境でしか働いたことがない模様

283:名無しさん@お腹いっぱい。
15/01/31 17:47:20.57 .net
こうじゃなくて
v=${v:-default}
こうでしょ
: ${w:=default}
っていうの有りますか?皆さんの、そういうの教えて下さい

284:名無しさん@お腹いっぱい。
15/02/01 00:46:16.74 .net
こうじゃなくて
echo -e 'hoge\nfuga'
こうでしょ
printf 'hoge\nfuga\n'

285:名無しさん@お腹いっぱい。
15/02/01 00:47:04.51 .net
俺はecho派

286:名無しさん@お腹いっぱい。
15/02/01 07:05:52.05 .net
公文い公文

287:名無しさん@お腹いっぱい。
15/02/01 13:49:52.79 .net
echo は -e が必要だったり不要だったりモノによってバラバラなんで printf だなぁ。
OSX の /bin/sh は bash だけど、同じ bash のはずなのに
bash -c "echo -e 'hoge\nfuga'" と sh -c "echo -e 'hoge\nfuga'" で
結果が違うとかめんどくさすぎる。

288:名無しさん@お腹いっぱい。
15/02/01 18:28:40.97 .net
似た様なのだけど、
こうじゃなくて
function f () {
echo hoge hoge
}
こうでしょ
f () {
echo hoge hoge
}

289:名無しさん@お腹いっぱい。
15/02/01 19:10:32.63 .net
個人的には上なんだけど
最近やってるのがjavascriptだからかな

290:名無しさん@お腹いっぱい。
15/02/02 10:43:19.51 .net
変数は大文字か小文字か。
個人的には環境変数と区別するために小文字なんだけど、
社内の他の人が書いたのを見ると大文字ばっかりなんだよな。

291:名無しさん@お腹いっぱい。
15/02/02 12:18:06.01 .net
いつexportしても問題が出ないような命名規則なら問題無しw

292:名無しさん@お腹いっぱい。
15/02/02 21:56:58.79 .net
質問です。
linux mint 17.1 でコマンドの練習してるのですが、
% ls -l
だと色々ずらーっと出るんですけど、本に書いてあるとおり、
ソートコマンドを練習しようとして
% ls -l | sort +4
と打ち込んでファイルサイズで降順ソートしたかったのですが
sort: cannot read: +4: そのようなファイルやディレクトリはありません
と出てしまいます。
bashですが、シェルの種類によってはこのオプション使えないんでしょうか。
-r等は正常に動作します。

293:名無しさん@お腹いっぱい。
15/02/02 22:04:13.81 .net
sort -k4
sort -k4r

294:名無しさん@お腹いっぱい。
15/02/02 22:34:00.27 .net
で、できました!有り難うございます!

295:名無しさん@お腹いっぱい。
15/02/03 03:09:11.93 .net
>>292-294
sort +4と同じ指定はsort -k5
たぶんls -lでファイルの所有者が全て同じで、できたと勘違いしてる
--debugオプションをつけるとわかりやすい
URLリンク(www.gnu.org)
> On older systems, sort supports an obsolete origin-zero syntax ‘+pos1 [-pos2]’ for specifying sort keys.
> The obsolete sequence ‘sort +a.x -b.y’ is equivalent to ‘sort -k a+1.x+1,b’ if y is ‘0’ or absent,
> otherwise it is equivalent to ‘sort -k a+1.x+1,b+1.y’.
sort +4という古いオプションの扱いはPOSIXのバージョンによるってことかな
URLリンク(www.gnu.org)

296:名無しさん@お腹いっぱい。
15/02/03 06:48:02.67 .net
Linux だったら ls コマンドは GNU coreutils の ls だろうから、
$ ls -l --sort=size
or
$ ls -lS
でええじゃまいか

297:名無しさん@お腹いっぱい。
15/02/03 08:37:05.99 .net
( 検索結果で上位に上がると期待して ) 日本語訳を貼り付けておきます
URLリンク(linuxjm.sourceforge.jp)
URLリンク(linuxjm.sourceforge.jp)

298:確認不足だった orz
15/02/03 08:40:20.78 .net
訂正
( 検索結果で上位に上がると期待して ) 日本語訳を貼り付けておきます
URLリンク(linuxjm.sourceforge.jp)
URLリンク(linuxjm.sourceforge.jp)

299:名無しさん@お腹いっぱい。
15/02/04 22:55:20.92 .net
>>298
おお、infoの日本語訳できたんだ
man on WWWのように検索できるとさらにいいね

300:名無しさん@お腹いっぱい。
15/02/08 15:04:24.54 .net
よく使うワンライナーなどはどうやって呼び出すものなんですか?
何か簡単に管理する方法がありませんかね?

301:名無しさん@お腹いっぱい。
15/02/08 15:06:57.37 .net
zshならzawから
vimのUnite historyの様なgrep効くから、それで呼ぶか
編集して完成させる

302:名無しさん@お腹いっぱい。
15/02/08 16:40:17.45 .net
>>301
anything.elみたいなヒストリーサーチみたいですね。
bashなのでどうしたものか。

303:名無しさん@お腹いっぱい。
15/02/09 09:34:08.43 .net
>>300
aliasじゃないの?

304:名無しさん@お腹いっぱい。
15/02/09 10:04:38.99 .net
自分で書いたスクリプトはいつでも、一見、間違いのないように見えるw

305:名無しさん@お腹いっぱい。
15/02/09 18:00:27.27 .net
まったくだ(´・ω・`)
ぼくの書いたスクリプトが動かないなんてけしからん(´・ω・`)
シェルの方を治したまえ

306:名無しさん@お腹いっぱい。
15/02/09 18:21:02.80 .net
cygwinからLinuxに移植したシェルスクリプトが,ping部分で成功しなかった

declare -A URL
URL=(
  ["Vim_part24"]="スレリンク(unix板)"
  ["vim_part5"]="スレリンク(software板)"
  )
# ping for download
ping_error=0
for i in ${!URL[@]}
do
  # ping ${URL[$i]} > /dev/null
  ping -n 1 `echo ${URL[$i]} | awk -F"/" '/http/{print $3}'` > /dev/null
  if [ "$?" -ne 0 ]; then
    echo "${i} : can not contact ${URL[$i]}"
    ping_error=1
  fi
done

307:名無しさん@お腹いっぱい。
15/02/09 18:41:13.94 .net
ping -c 1 ... にするべきじゃないの?
pingのコマンドオプションって統一されてないよなぁ

308:名無しさん@お腹いっぱい。
15/02/09 19:27:08.45 .net
配列を使うのはダサいと思うのです。
#!/bin/sh
url_list='
Vim_part24 スレリンク(unix板)
vim_part5 スレリンク(software板)
'
ping="ping -w 3 -c 1"
echo "$url_list" | while read thr url __; do
case "$url" in
https?://*)
host=`echo $url | cut -d/ -f3`
if ! $ping $host >/dev/null; then
echo "$thr: cannot contact $url"
err=1
fi
;;
esac
done
exit $err

309:名無しさん@お腹いっぱい。
15/02/09 19:28:49.19 .net
ああ、case の条件部分がおかしい。
URLリンク(*|fhttp:)">URLリンク(*|URLリンク(search.cpan.org)
てのがあった
このままじゃ使いものにならんけどね

411:名無しさん@お腹いっぱい。
15/03/12 16:01:30.66 .net
ちょっとお知恵を拝借したい
テキストファイルを検索して見つけた行数を取得したいときって
grep -nで行数出力させて取得するのが一番シンプルかな?
マッチする最終行にしたい場合はtailと組み合わせてさ
ちなみにシェル知らなかったころってreadで1行ずつ読み込んで判断してたw

412:名無しさん@お腹いっぱい。
15/03/12 16:32:34.70 .net
「一番」って難しいこと聞くね

413:名無しさん@お腹いっぱい。
15/03/12 18:00:51.55 .net
>>411
grep -c

414:名無しさん@お腹いっぱい。
15/03/12 18:40:40.82 .net
>>413
オマエいつも問題の意味取り違えて回答して点数もらえないタイプだろw

415:名無しさん@お腹いっぱい。
15/03/12 20:35:27.12 .net
>>414
ん?
質問:検索して見つけた行数を取得したい
cオプション: 検索条件にマッチした行数を表示する

416:名無しさん@お腹いっぱい。
15/03/12 20:36:26.22 .net
>>414
あ、わかった
質問は行番号のことを行数といっているのね

417:名無しさん@お腹いっぱい。
15/03/12 20:36:37.62 .net
>>415
まだわかってないのか…重症?

418:名無しさん@お腹いっぱい。
15/03/12 21:26:36.04 .net
ちょっとwc

419:名無しさん@お腹いっぱい。
15/03/12 22:07:04.23 .net
>>418
オプションなしだと複数返すコマンドだよね

420:名無しさん@お腹いっぱい。
15/03/13 00:23:15.74 .net
行数と行番号じゃ、意味が違うな。
日本語に不自由してるのぅ

421:名無しさん@お腹いっぱい。
15/03/13 01:03:30.38 .net
grep -nで出力されるのは行数ではないね

422:名無しさん@お腹いっぱい。
15/03/13 01:16:54.86 .net
なんかgrep -c言ってる人がバカにされてるけど
>grep -nで行数出力させて取得するのが一番シンプルかな?
>マッチする最終行にしたい場合はtailと組み合わせてさ
これから察するに、行数と書いてはいるが、実際は行数じゃなくて行番号のこと言ってるんじゃないの?
マッチした行数が知りたいなら最終行の話なんて出てこないだろ
つまり本当にバカなのは>>417と推測
まぁ質問主から続きがなければ有耶無耶だが

423:421
15/03/13 01:17:57.58 .net
俺何言ってんだ?
すまん眠かったってことで何も見なかったことにしてくれ……死ぬ……

424:名無しさん@お腹いっぱい。
15/03/13 04:43:04.00 .net
行数、直訳すると line number

425:名無しさん@お腹いっぱい。
15/03/13 07:28:39.51 .net
line countじゃないの?

426:名無しさん@お腹いっぱい。
15/03/13 07:40:15.74 .net
直訳、と言ってるだろ。
natural number = 自然数
complex number = 複素数
number = 数

427:名無しさん@お腹いっぱい。
15/03/13 08:04:07.16 .net
>number = 数
ちがう。

428:名無しさん@お腹いっぱい。
15/03/13 08:20:54.53 .net
違うの知ってて言ってんでしょ

429:名無しさん@お腹いっぱい。
15/03/13 11:04:35.04 .net
順序数?

430:名無しさん@お腹いっぱい。
15/03/13 13:12:27.06 .net
行番号を行数と呼ぶ人がいるとして、その人は行数を何と呼ぶのでしょうかね。行の数?

431:名無しさん@お腹いっぱい。
15/03/13 17:11:36.57 .net
行回数

432:名無しさん@お腹いっぱい。
15/03/14 01:06:12.05 .net
行数はnumber of linesだろ
Fランもたいがいにせいよ

433:名無しさん@お腹いっぱい。
15/03/14 02:26:16.92 .net
>>411
まあgrepでいいと思う
grep -n regexp FILE | tail -n1 | cut -d: -f1
awk /regexp/'{print NR}' FILE | tail -n1
sed -n /regexp/= FILE | tail -n1

434:名無しさん@お腹いっぱい。
15/03/14 04:57:44.74 .net
>>432
行数は line count (だからこそ grep -c )

435:名無しさん@お腹いっぱい。
15/03/14 05:17:25.87 .net
count number of lines じゃね
てかどーでもいいよ
行数にしろ行番号にしろ質問者が具体例を明示してる時点で誤解しようがないだろ
早がってんしたエスパースキルゼロのうっかりさんが
早漏の言い訳をぐだぐだぐだぐだぐだぐだぐだぐだぐだぐだ
くだらねー

436:名無しさん@お腹いっぱい。
15/03/14 05:44:10.73 .net
それは「行数を数えろ」だろ
中卒もたいがいにしとけ

437:名無しさん@お腹いっぱい。
15/03/14 07:03:54.77 .net
>>436
countは動詞だけじゃなく名詞にもなるんだよ、知らなかった?

438:名無しさん@お腹いっぱい。
15/03/14 08:50:28.21 .net
へー

439:名無しさん@お腹いっぱい。
15/03/14 18:41:01.09 .net
>>437
名詞が連続してるが、それはどう言い訳するんだ?

440:名無しさん@お腹いっぱい。
15/03/14 21:16:03.47 .net
URLリンク(www.gnu.org)
-c
--count
Suppress normal output; instead print a count of matching lines for each input file. With the -v (--invert-match) option, count non-matching lines. (-c is specified by POSIX.)

441:名無しさん@お腹いっぱい。
15/03/15 00:27:31.56 .net
一行の中に、
bbbbaaa124iiiiiccccaaaa456lllllddddaaa789と書いてあった場合に、
特定の文字列の後に続いている数字を、スペース空けて抜き出す書き方はないでしょうか
うえの場合だとaaaの後にあるものを抜き出すように、124 456 789のような・・
素人質問ですいませんがよろしくお願いします

442:名無しさん@お腹いっぱい。
15/03/15 01:12:54.15 .net
GNU grep が使えるなら
$ echo "bbbbaaa124iiiiiccccaaaa456lllllddddaaa789" | grep -Po '(?!aaa)[[:digit:]]+' | tr '\n' ' '

443:名無しさん@お腹いっぱい。
15/03/15 02:09:05.45 .net
>>442
できました!
使わせていただきます。ご親切にありがとうございました。

444:名無しさん@お腹いっぱい。
15/03/15 03:20:18.84 .net
追加で質問したいのですが、
上の例でbbbbaaa124iiiiicccc222aaaa456lllllddddaaa789とあった場合に、
aaaの直後でない222は省いて124 456 789だけ方法はないでしょうか
何度もすいません

445:名無しさん@お腹いっぱい。
15/03/15 03:27:09.47 .net
grep -Po '(?<=aaa)\d+'

446:名無しさん@お腹いっぱい。
15/03/15 03:50:51.90 .net
>>445
完璧にできました!
この時間に回答いただけるとは思いませんでした。
大変助かりました。ありがとうございました。

447:名無しさん@お腹いっぱい。
15/03/15 13:29:40.91 .net
何度もすいません
上の例で、bbbbaaa0.24iiiiicccc2.22aaaa456lllllddddaaa7.89 など
小数点も含む数字が混じっている場合に、同様の条件で0.24 456 7.9を抜き出す方法はないでしょうか
あまりにも聞きすぎなので最後にしようと思います。

448:名無しさん@お腹いっぱい。
15/03/15 14:11:57.45 .net
こうかなぁ…
grep -Po '(?<=aaa)\d+(\.\d+)?
でもこれだと、".01" とかにはマッチしないけどね。
それと、"1.2.3" なんて文字列があると、"1.2" にマッチしちゃう。

449:名無しさん@お腹いっぱい。
15/03/15 14:12:54.78 .net
ちったぁ自分で考えな
過去2回の答えがなぜそうなるのかを考えれば応用でいけるはずだ

450:名無しさん@お腹いっぱい。
15/03/15 14:15:07.46 .net
grep -o 'aaa[0-9\.][0-9\.]' | tr '\n' ' '

451:名無しさん@お腹いっぱい。
15/03/15 14:16:19.36 .net
ミス
grep -o 'aaa[0-9\.][0-9\.]*' | sed 's/aaa//g' | tr '\n' ' '

452:名無しさん@お腹いっぱい。
15/03/15 14:37:30.13 .net
>>448
grep -Po '(?<=aaa)\d+(\.\d+)?(?=[^\d.]|$)'

453:名無しさん@お腹いっぱい。
15/03/15 14:52:31.67 .net
>>448
>>450
>>451
再度ありがとうございました。
私のファイルのケースですと450さんのやり方で完全にできました!
大変助かりましたし、勉強になりました。ありがとうございました。

>>449
本当そうしようと思います。
それ以前にgrepやsedは簡単な文字抜き出しぐらいにしか使ったことがなかったのですが、
こんなに便利だとは驚きました。学習して次は自分で解決できるようにしたいと思います

454:448
15/03/15 14:55:28.70 .net
これは私見だが
grepの-PはPerlの正規表現として扱うためのオプションだ
Perlを知ってるなら問題ないが、知らないなら>>451のが多分勉強対象としては正しい

455:名無しさん@お腹いっぱい。
15/03/15 15:09:05.03 .net
>>452
投稿した後でレス確認しました。すいません。
こちらのやり方でもできました!ありがとうございました。
書き方の意味を勉強してみたいと思います。
>>454
ありがとうございます。perlも知らないので、
教えていただいたオプションの意味も含めて調べてみようと思います。

456:395
15/03/16 22:22:07.74 iYLKElrbV
>>401
なんとか出来ました!ありがとうございました!

sed -e 's/_[0-9][0-9]_/_%%_/' tree.txt | uniq #sortするとls -Rの構造が崩れる
awk '!a[$0]++' tree.txt #fooとbarが交互になっている行をuniq
uniq tree.txt #空行(改行?)が全部消えてまう
sed -i "/:$/i \n" tree.txt #?わからん しっぽが:の行の前に空行を挿入
sed  "/:$/i \n" tree.txt   #?
sed -e "s/^n//" tree.txt   #なんとかできた。あとは%%を数字に戻すのだけ手打ちでがんばる

457:395
15/03/16 22:22:55.63 iYLKElrbV
>>401
何とか出来ました!ありがとうございました!

sed -e 's/_[0-9][0-9]_/_%%_/' tree.txt | uniq #sortするとls -Rの構造が崩れる
awk '!a[$0]++' tree.txt #fooとbarが交互になっている行をuniq
uniq tree.txt #空行(改行?)が全部消えてまう
sed -i "/:$/i \n" tree.txt #?わからん しっぽが:の行の前に空行を挿入
sed  "/:$/i \n" tree.txt   #?
sed -e "s/^n//" tree.txt   #なんとかできた。あとは%%を数字に戻すのだけ手打ちでがんばる

458:395
15/03/16 22:24:14.07 iYLKElrbV
連投申し訳ない

459:名無しさん@お腹いっぱい。
15/03/25 06:56:05.87 .net
専用コマンド使わずに実用的な強度の暗号復号フィルタとか誰か書ける?

460:名無しさん@お腹いっぱい。
15/03/25 12:51:41.84 .net
>>459
専用コマンドってのは、gpg とか openssl みたいなのを指してるの?
python とか perl とかを使っていいのならライブラリ次第で何とでもなりそうだけど、
それも NG なのかな?

461:名無しさん@お腹いっぱい。
15/03/25 15:07:14.94 .net
rot13でよければ
tr A-Za-z N-ZA-Mn-za-m

462:名無しさん@お腹いっぱい。
15/03/25 18:11:12.12 .net
それはさすがに「実用的な強度」とは言えないのでは……

463:名無しさん@お腹いっぱい。
15/03/27 22:26:36.44 .net
会社でシェルスクリプト(awkやsed)いじる必要があるんですが
何かおすすめの本ないですか?

464:名無しさん@お腹いっぱい。
15/03/28 00:47:40.73 .net
URLリンク(www.goggle.co.jp)

465:名無しさん@お腹いっぱい。
15/03/28 11:31:55.66 .net
後ろからn文字目のみを削除する方法ってある?
1234567890
なら
123456780
12345
なら
1235
になるような。

466:名無しさん@お腹いっぱい。
15/03/28 14:11:41.06 gf0XqcquF
>>465
nawkのsubstrでできない

467:名無しさん@お腹いっぱい。
15/03/28 15:17:24.35 shU+BQtVu
>>465
rev, cut -c, head -c, tail -c などでいけるのでは?
$ echo 12345 | rev | cut -c1,3- | rev
1235
$ echo 1234567890 | rev | cut -c1,3- | rev
123456780

468:名無しさん@お腹いっぱい。
15/03/28 14:36:27.39 .net
sed -e 's/.\(.\{n-1\}\)$/\1/'
後ろから2文字目なら
echo 12345 | sed -e 's/.\(.\{1\}\)$/\1/'
1235

469:名無しさん@お腹いっぱい。
15/03/28 15:15:24.11 .net
>>460
LL言語呼び出すにしても拡張ライブラリの専用コマンドに依存するのはNGじゃない?
nkfでrot13読むのは専用コマンドとは言えない気がするけど>>462だよなあ。
バイナリ法辺りを実装すればとりあえずなんとかなるんだろうか?

470:名無しさん@お腹いっぱい。
15/03/28 15:18:54.26 .net
>>465
rev, cut -c, head -c, tail -c などでいけるのでは?
$ echo 12345 | rev | cut -c1,3- | rev
1235
$ echo 1234567890 | rev | cut -c1,3- | rev
123456780

471:名無しさん@お腹いっぱい。
15/03/29 05:16:26.01 .net
>>465
>後ろからn文字目のみを削除する方法ってある?
a=1234567890; echo "${a%??}${a#?????????}"

472:名無しさん@お腹いっぱい。
15/03/29 08:10:35.43 .net
>>471
それ、n文字目と言うのが $n 変数に入ってる場合のこと聞いてるんでは? 固定数値ならいろいろ方法あるよ。

473:名無しさん@お腹いっぱい。
15/03/29 13:30:23.41 .net
>>472
可変でも同じことはできるけど。
a=1234567890; n=4; f(){ r=$1; while [ ${#r} != $2 ]; do eval r=\${r$3?}; done; echo $r; }; echo $(f $a $((${#a} - $n)) %)$(f $a $(($n - 1)) \#);

474:名無しさん@お腹いっぱい。
15/03/29 13:51:13.01 .net
もっとエレガントな方法がいいなぁ

475:名無しさん@お腹いっぱい。
15/03/29 14:10:10.11 .net
467が他の回答に勝っている点って何があるのかなあ

476:名無しさん@お腹いっぱい。
15/03/29 14:39:04.14 .net
bash + GNU coreutils の cut コマンド限定
範囲チェックはしていない
ncut () {
declare str="$1"
declare -i idx="$2"
declare -i len=$(expr length "$str")
echo $str | cut --complement -b$((len - idx + 1))
}
$ ncut 1234567890 2
123456780
$ ncut 12345 2
ncut 12345 2


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch