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