
저는 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
위 명령을 각각 지원하지 않는 경우.