文字列を区切り文字(文字列自体でもある)で区切られた部分文字列に分割したいと思います。
私はこれをどうすることができますか?
ちょうどbashを使用しますか? (私の主な関心でもあるミニマリズムのために)
それとも、特定のテキスト処理プログラムが許可されていますか? (プログラム利用時の便宜のため)
ありがとうございます。
簡単な例、
- 、 に分けられます。
1--123--23
--
1
123
23
- 合計に分けて
1?*123
?*
1
123
答え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