数字で始まる/終わる単語の検索と削除

数字で始まる/終わる単語の検索と削除

大きなファイル(> 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フラグは、変更を所定の位置に保存する役割を果たします。

1行がよりトリッキーになる可能性があります。

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

関連情報