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

또 다른 짧은 이야기파이썬해결책:

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

관련 정보