Bash 스크립트에서 이 하위 문자열을 얻는 방법은 무엇입니까?

Bash 스크립트에서 이 하위 문자열을 얻는 방법은 무엇입니까?

저는 bash 스크립트를 작업 중입니다.

문자열이 포함된 var가 있습니다. 다음은 문자열입니다.

tSA_15_20161014_11-12-50

기본적으로 형식은tSA_(id)_(year)(month)(day)_(hour)-(min)-(seg)

중요한 정보:

  • ID는 0에서 999 사이의 숫자일 수 있습니다.
  • 연도 형식은 다음과 같습니다.이야
  • 월 형식mm
  • 일본어 형식DD
  • 시간 형식24 시간

내가 얻고 싶은 문자열은 다음과 같습니다.

20161014111250

이것은yyyymmddHHMMSS

영어는 제 모국어가 아니므로 이해가 안 되는 부분이 있으면 말씀해 주세요. 감사해요.

답변1

매개변수를 사용한 확장 bash:

$ var='tSA_15_20161014_11-12-50'

$ var="${var#*_}"  ## Extracts the portion after first `_` i.e. 
                      new `var` will be `15_20161014_11-12-50`

$ var="${var#*_}"  ## again gets the portion after first `_`, so in this case
                      after operation `var` will contain `20161014_11-12-50`

$ echo "${var//[-_]/}"  ## Replaces all `-` and `_` from `$var` with null
20161014111250

답변2

echo "tSA_15_20161014_11-12-50" | awk -F'_' '{print $3$4}' | tr -d -

echo var 저장 문자열

설명하다:

awk -F'_' '{print $3$4}'필드 구분 기호를 다음으로 변경 _하고 세 번째 및 네 번째 열을 인쇄합니다.

출력은 다음과 같습니다2016101411-12-50

tr -d --이전 결과에서 삭제되었습니다.

답변3

주어진

var='tSA_15_20161014_11-12-50'

그 다음에

IFS=_ read -a arr <<< "${var//-/}"
printf '%s%s\n' "${arr[2]}" "${arr[3]}"
20161014111250

답변4

또 다른 awk방법. awk여러 문자를 필드 구분 기호로 사용할 수 있으므로 이 작업은 한 단계로 수행할 수 있습니다 .

$ awk -F'[-_]' '{print $3$4$5$6}' <<<"$var"
20161014111250

또는 Perl에서는:

$ perl -pe 's/.+?_.+?_//; s/[-_]//g' <<<"$var"
20161014111250

또는

$ perl -F_ -ane 's/-//g for @F; print @F[2..$#F]' <<<"$var"
20161014111250

나는 그것을 사용하고 있다여기 문자열이 있습니다, 그러나 쉘이 echo $var | command위 명령을 각각 지원하지 않는 경우.

관련 정보