
txt 파일에서 정렬하지 않고 알파벳 순서로 된 모든 시퀀스를 찾고 싶습니다.
예: 텍스트 파일이 다음과 같다고 가정합니다.
aedftg
wqof
abcdef
oufn
pqrs
aabcd
출력은 다음과 같아야합니다
abcdef
pqrs
와 같은 문자를 반복하지 않아도 됩니다 aabcd
.
답변1
옵션 중 하나(영어로 하드 코딩됨):
grep -ix 'a*b*c*d*e*f*g*h*i*j*k*l*m*n*o*p*q*r*s*t*u*v*w*x*y*z*' input
신용닌자곰원숭이내 머릿속에서 싹트고 있던 아이디어를 자세히 설명해주셔서; 반복되는 문자( )를 허용하도록 정규식을 수정했습니다 aabcc
.
또 다른 옵션:
로캘별 조합 순서를 확인하는 데 사용하는 것이 sort
더 좋은 방법이므로 알파벳을 하드 코딩할 필요가 없습니다. 처럼마이크존시가 그랬어, 이는 줄의 문자를 별도의 줄로 분할해야 함을 의미합니다. sed에 대한 호출을 피하기 위해 쉘 스크립트(하위 문자열 확장을 지원하는 최신 쉘 사용)를 사용하여 이 작업을 수행했으며 sort
입력이 이미 정렬되었는지 여부를 나타내기 위해 's -c 옵션도 사용합니다.
while IFS= read -r line
do
for((i=0; i < ${#line}; i++))
do
printf '%s\n' "${line:i:1}"
done | sort -c 2>/dev/null && printf '%s\n' "$line"
done
불일치가 발견 되면 sort
stderr로 출력되지만 우리는 반환 코드에만 관심이 있으므로 stderr을 삭제합니다.
영어가 아닌 입력을 사용한 데모(문자 $
는 쉘 프롬프트임):
$ cat input
αβγα
αβγ
$ ./sorted2 < input
αβγ
$
답변2
완전성을 위해 awk
패턴과 데이터의 일반적인 관계가 바뀌는 기반 솔루션입니다.
awk 'BEGIN{ref="abcdefghijklmnopqrstuvwxyz"} ref ~ $0' file.txt
이는 파일의 행을 정렬된 문자의 "참조" 문자열과 일치하는 정규식으로 해석 a
합니다 z
. 일치하는 항목이 있는 경우에만(즉, 해당 줄의 문자열이 의 하위 문자열임을 의미 a ... z
) 해당 줄이 인쇄됩니다.
답변3
perl -MPOSIX -Mopen=locale -lne '
print unless m{(.)(.)(?(?{strcoll($1, $2) < 0})(*FAIL))}' < file
file
사용자 로케일에서 이전 문자 이후에 정렬되지 않는 문자를 포함하는 행을 제외하고 인쇄합니다 .
답변4
cat homework.txt | while read aline; do
stringORIG=$(echo -n "$aline" | sed 's/\(.\)/\1\n/g')
stringABC=$(echo -n "$aline" | sed 's/\(.\)/\1\n/g' | sort)
if [ "$stringORIG" == "$stringABC" ]; then
echo "$aline"
fi
done
.
abcdef
pqrs
ps... sort 명령을 사용하지 않으려면 각 문자를 int로 변환하고 if 문을 사용하여 마지막 문자가 다음 문자보다 작은지 확인할 수 있습니다.