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]$"

$studyT임의의 문자(귀하의 예에서는) 다음에 줄 끝이 오는 대문자를 반환합니다 .

-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

관련 정보