문자열을 구분 기호(문자열 자체이기도 함)로 구분된 하위 문자열로 분할하고 싶습니다.
내가 이걸 어떻게 할 수 있지?
그냥 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
또 다른 짧은 이야기파이썬해결책:
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