grep을 사용하여 문자열 일부 추출

grep을 사용하여 문자열 일부 추출

디렉토리에 3개의 파일이 있습니다

MYO144064T
MYO144064TA
MYO144064TX

숫자와 11번째 문자가 변경되는 곳입니다. 내 csh 스크립트에서 아마도 grep을 사용하여 'A'와 'X' 문자를 추출하고 싶습니다.

$study 변수는 MYO144064와 같습니다.

지금까지 관리한 것은 매우 번거롭습니다.

ls | grep $study | cut -c 11 | sed 's/\///'

나에게주는

A
X

최소한의 프로세스로 추가 빈 줄 없이 이 작업을 수행하려면 어떻게 해야 합니까?

답변1

ls | grep -oP "(?<=$study.)[A-Z]$"

$study임의의 문자 하나 더하기( T귀하의 예에서는 )의 내용 앞에오고 그 뒤에 줄의 끝이 오는 대문자를 반환합니다 .

-P긍정적인 뒤돌아보기 표현식을 사용하려면 옵션(Perl 정규 표현식)이 필요 하지만 (?<=...)일부 시스템 및 플랫폼에서는 사용 가능하지 않을 수 있습니다.

답변2

ls | grep $study | grep -o "[AX]$"

마지막 문자로 'A' 또는 'X'의 결과만 반환합니다.

답변3

해결책 perl:

$ perl -nle 'print chop if length == 11' file
A
X

또는 다음을 사용할 수 있는 경우 bash:

while read var
do
    [ ${#var} -eq 11 ] && echo ${var:(-1)}
done < file

관련 정보