다음 문자열의 마지막 부분에서 두 번째 필드를 추출하고 싶습니다.
foo_1.103.debug_xx.ver21-inc-1 --> string extracted "debug_xx"
foo_1.103.1.0.release_32_xx.ver21-inc-1 --> string extracted "release_32_xx"
foo_1.103.1.0.release_xx.ver21-inc-1 --> string extracted "release_xx"
어떤 도움이라도 대단히 감사하겠습니다.
답변1
순수함 bash
:
IFS='.' read -a p <<< 'foo_1.103.1.0.release_32_xx.ver21-inc-1'
echo "${p[${#p[@]}-2]}"
다음을 사용하면 이 작업을 더 쉽게 수행할 수 있습니다 awk
.
awk -F. '{print$(NF-1)}' <<< 'foo_1.103.1.0.release_32_xx.ver21-inc-1'
구문 분석하려는 문자열이 파일 이름인 경우에도 다음을 사용할 수 있습니다 awk
.
awk -F. 'BEGIN{for(i=1;i<ARGC;i++){$0=ARGV[i];print$(NF-1)}}' foo*
답변2
sed
이를 수행하는 명령:
sed 's/foo_[0-9.]*\([^.]*\).*/\1/' inputfile
물론, inputfile
문자열이 포함되어 있다고 가정합니다(예제에서와 같이). 파일 이름을 사용하고 있다고 가정하면 결과를 파이핑하는 ls
것도 sed
가능합니다.
답변3
${VAR%PATTERN}
마지막 필드에 해당하는 접미사를 제거한 다음 ${NEWVAR##PATTERN}
마지막 남은 필드를 제외한 모든 필드에 해당하는 접두사를 제거하는 데 사용됩니다 .
all_but_last_field=${mystring%.*}
second_to_last_field=${all_but_last_field##*.}
문자열을 변수에 저장하고 중간 결과를 변수에 저장해야 합니다. 확장 기능을 직접 연결할 수 없습니다(zsh에서는 가능하지만 bash에서는 가능하지 않음).
답변4
다음 파일이 있다고 가정합니다.
ls foo*|awk -F. '{$3 인쇄}'