큰 파일(>10000줄)이 있고 각 줄에는 단어가 포함되어 있으며 각 단어 뒤에는 개행 문자가 옵니다. 단어에는 공백이 포함되지 않습니다.
숫자로 시작 및/또는 끝나는 단어를 나열한 다음(또는 새 파일로 출력하는 것이 더 좋음) 원본 파일에서 해당 단어를 제거하고 싶습니다.하지만숫자만 포함된 단어를 삭제하고 싶지 않습니다.
예를 들어 콘텐츠가 있는 경우
789
hello
1hello
112121hello3323
he11o
hello9
88888
그런 다음 문자열 1hello
, 112121hello3323
을 hello9
출력으로 얻은 다음 파일에서 제거합니다.
어떻게 해야 하나요?
답변1
GNU grep
grep -vP '^\d+\D|\D\d+$'
생산하다
789
hello
he11o
88888
답변2
실제로 소스 파일을 편집하고 버려진 파일로 새 파일을 만드는 것은 약간 까다롭습니다. 난 이걸 할거야
$ cat file
789
hello
1hello
112121hello3323
he11o
hello9
88888
$ perl -i -lne 'if (/^\d+\D|\D\d+$/) {warn "$_\n"} else {print}' file 2>file_nums
$ cat file
789
hello
he11o
88888
$ cat file_nums
1hello
112121hello3323
hello9
일치하는 행은 stderr에 출력된 다음 별도의 파일로 리디렉션됩니다. Perl의 -i
플래그는 변경 사항을 제자리에 저장하는 역할을 합니다.
한 줄이 더 까다로울 수 있습니다.
perl -i -lne 'print {/^\d+\D|\D\d+$/ ? STDERR : ARGVOUT} $_' file 2>file_nums
답변3
해결책 awk
:
awk '$0!~/.*[[:alpha:]][[:digit:]]+$/ && $0!~/^[[:digit:]]+[[:alpha:]]+/' words.txt
789
hello
he11o
88888