bashでいくつかの区切り文字に文字列を分割しますか?

bashでいくつかの区切り文字に文字列を分割しますか?

文字列を区切り文字(文字列自体でもある)で区切られた部分文字列に分割したいと思います。

私はこれをどうすることができますか?

  • ちょうどbashを使用しますか? (私の主な関心でもあるミニマリズムのために)

  • それとも、特定のテキスト処理プログラムが許可されていますか? (プログラム利用時の便宜のため)

ありがとうございます。

簡単な例、

  • 、 に分けられます。1--123--23--112323
  • 合計に分けて1?*123?*1123

答え1

IFSとを使用する純粋なbashソリューションですread。文字列には以下を含めないでください(またはIFSの場合は残念ながら機能しませんが、たとえば機能しない$'\2'他の項目)。$'\0'$'\666'

#!/bin/bash

split_by () {
    string=$1
    separator=$2

    tmp=${string//"$separator"/$'\2'}
    IFS=$'\2' read -a arr <<< "$tmp"
    for substr in "${arr[@]}" ; do
        echo "<$substr>"
    done
    echo
}


split_by '1--123--23' '--'
split_by '1?*123' '?*'

またはPerlを使用してください。

perl -E 'say for split quotemeta shift, shift' -- "$separator" "$string"

答え2

簡単にアッ:

str="1--123--23"
awk -F'--' '{ for(i=1;i<=NF;i++) print $i }' <<< $str

出力:

1
123
23

もう一つの短い話Python解決策:

splitter.pyスクリプト:

import sys
print('\n'.join(sys.argv[2].split(sys.argv[1])))

パラメータ順序:

  • sys.argv[0]- スクリプト名(例splitter.py:)

  • sys.argv[1]- 部分文字列区切り記号

  • sys.argv[2]- 文字列を入力してください

使用法:

python splitter.py "?*" "1?*123"
1
123

python splitter.py "--" "1--23--123"
1
23
123

答え3

純粋なPOSIXシェル:

string="1--123--23"
del="--"

while test "${string#*$del}" != "$string" ; do
  echo "${string%%$del*}"
  string="${string#*$del}"
done
echo "$string"

区切り記号のまたはを*エスケープ?する必要があります。del='\*'

答え4

上記と似ていますが、URIのみをインポートしたいとします。たとえば、次のようになります。

URL="http://something.com/backup/v/photos/path/to/"
URI="./$(echo $URL | awk -F'.com/' '{print $2}')"
echo $URI

関連情報