다음과 같은 비밀번호 목록이 있습니다.
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
주어진 정규식과 일치하는 각 줄에서 특정 작업을 수행하는 명령이 있습니다. 나는 m
ove 명령을 사용하여 "라인 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