특정 순서의 모든 단어를 목록의 맨 위로 이동

특정 순서의 모든 단어를 목록의 맨 위로 이동

다음과 같은 비밀번호 목록이 있습니다.

aaaa00
aaaa01
aaaa02
...
zzzz97
zzzz98
zzzz99

이 패턴이 있는 모든 단어를 목록(텍스트 파일)의 시작 부분으로 이동하고 싶습니다.

모음-자음-모음-자음-더블 엑스

어떻게 해야 하나요? 감사해요.

답변1

사용 ex:

vowel='[AaEeIiOoUu]'
cons='[BCDFGHJKLMNPQRSTVWXYZbcdfghjklmnpqrstvwxyz]'
printf '%s\n' "g/^$vowel$cons$vowel$cons[0-9][0-9]\$/m 0" x | ex file.txt

을 사용하는 또 다른 방법 set ic은 다음과 같습니다 set ignorecase.

vow='[aeiou]'
cns="[$(printf %s {a..z} | tr -d "$vow")]"
printf '%s\n' 'set ignorecase' "g/^$vow$cns$vow$cns[0-9][0-9]\$/m 0" x | ex test.txt

이러한 답변은POSIX 호환. 각 명령의 중심에는 g주어진 정규식과 일치하는 각 줄에서 특정 작업을 수행하는 명령이 있습니다. 나는 move 명령을 사용하여 "라인 0" 뒤에 일치하는 라인을 배치했습니다. 즉, 파일의 시작 부분으로 이동했습니다.


그런데, 당신은 무엇을 하고 있나요? 비밀번호 유형을 수동으로 수정하시겠습니까?

코드 골프에서는 어떻습니까?

printf %s\\n {a,e,i,o,u}{b..z}{a,e,i,o,u}{b..z}{00..99}|grep -ve^.{,..}\[eiou]

여기서는 78바이트만 사용하여 여러분이 관심을 갖고 있는 모든 조합을 생성했습니다! :피

답변2

모음-비모음-모음-비모음으로 시작하는 모든 줄을 파일의 시작 부분으로 이동합니다.

{ grep -i '[aeiouy][^aeiouy][aeiouy][^aeiouy]' input; grep -iv '[aeiouy][^aeiouy][aeiouy][^aeiouy]' input; } >outfile

"비모음"이 충분하지 않으면 [^aeiouy]자음 목록으로 바꾸세요: [bcdf...].

다음 입력 파일을 고려하십시오.

$ cat >input
asasxx
bsbsxx
esesxx
wswsxx

다음 명령을 실행하세요.

$ { grep -i '[aeiouy][^aeiouy][aeiouy][^aeiouy]' input; grep -iv '[aeiouy][^aeiouy][aeiouy][^aeiouy]' input; } >outfile

출력 파일은 다음과 같습니다.

$ cat outfile
asasxx
esesxx
bsbsxx
wswsxx

관련 정보