[過去ログ] シェルスクリプト総合 その28 (620レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
443
(3): 名無しさん@お腹いっぱい。 [sage] 2021/07/28(水) 19:08:57.09 AAS
_数字列_数字列_数字列_を含む文字列から先頭の数字列だけを取り出したいので
前段階としてそれより前の部分を切り出すために
echo ${文字列%_*[0-9]_*[0-9]_*[0-9]_*}
としてみたのですが、
aaa_bbb_ccc_ddd_eee_123_4_567_xxxxx_123yyy_4f6_789c_zzz
の場合には aaa_bbb_ccc_ddd_eee ではなく aaa_bbb_ccc_ddd_eee_123 になってしまいます。
どうすればいいでしょうか?
445
(1): 名無しさん@お腹いっぱい。 [sage] 2021/07/28(水) 21:32:13.47 AAS
>>443
シェルの変数置換じゃなくて、sedで置換したほうがええやろ。
まっとうな正規表現が使えるしな。
446: 名無しさん@お腹いっぱい。 [] 2021/07/30(金) 07:50:18.18 AAS
>>443
そうなるように書いていますけど?
450
(1): 名無しさん@お腹いっぱい。 [sage] 2021/08/08(日) 22:07:53.75 AAS
>>443
こんな感じでいけるんでね?前段階の話すっ飛ばして答えだけど
テストしてないので動かなくても知らん

isnum() {
  case "$1" in
    *[!0-9]*) return 1 ;;
    *) return 0 ;;
  esac
}
str="aaa_bbb_ccc_ddd_eee_123_4_567_xxxxx_123yyy_4f6_789c_zzz"
IFS="_"
set -- $str
while [ "$#" -gt 0 ]; do
  if isnum "$1" && isnum "$2" && isnum "$3"; then
    echo "$1"
  fi
  shift
done
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.025s