숫자로 시작/끝나는 단어 찾기 및 삭제

숫자로 시작/끝나는 단어 찾기 및 삭제

큰 파일(>10000줄)이 있고 각 줄에는 단어가 포함되어 있으며 각 단어 뒤에는 개행 문자가 옵니다. 단어에는 공백이 포함되지 않습니다.

숫자로 시작 및/또는 끝나는 단어를 나열한 다음(또는 새 파일로 출력하는 것이 더 좋음) 원본 파일에서 해당 단어를 제거하고 싶습니다.하지만숫자만 포함된 단어를 삭제하고 싶지 않습니다.

예를 들어 콘텐츠가 있는 경우

789
hello
1hello
112121hello3323
he11o
hello9
88888

그런 다음 문자열 1hello, 112121hello3323hello9출력으로 얻은 다음 파일에서 제거합니다.

어떻게 해야 하나요?

답변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

관련 정보