Bagaimana cara mengambil file yang HANYA berisi angka?

Saya mencoba mengambil nama file txt yang berisi angka dan angka saja, tetapi saya tidak tahu apakah grep cocok untuk pekerjaan itu.

jika saya memiliki file seperti di bawah ini...

FILE1: 12324
FILE2: 12345q
FILE3: qqerxv

Seharusnya hanya memberi saya nama FILE1.

Saya sudah mencoba grep -r -l [a-zA-Z] tetapi yang terjadi justru sebaliknya.

Pola apa yang harus saya gunakan? Apa yang harus saya lakukan untuk mengambil semuanya kecuali file yang berisi apa pun selain angka

Bagaimana cara mengambil file yang HANYA berisi angka?


person ShamanWarrior    schedule 28.08.2019    source sumber


Jawaban (3)


grep -r -L "[^0-9 ]" .

[^0-9 ] akan cocok dengan apa pun yang tidak mengandung angka atau spasi (dianggap cocok atau semua file yang mengandung spasi dan angka akan dibuang).

Bendera -L adalah --files-without-match, jadi ini pada dasarnya memberi Anda file yang mengandung angka atau spasi.

Membalikkan pencarian jauh lebih baik daripada mencari file yang berisi [a-zA-Z] karena pencarian ini akan rusak jika ada karakter khusus lainnya (_=+&...) di sana.

Ngomong-ngomong, flag -r akan mencari secara rekursif di direktori saat ini. Jika Anda hanya ingin mencari file di direktori saat ini saya sarankan menghapus -r dan mengganti . dengan * atau cukup menggantinya dengan nama satu file yang ingin Anda cocokkan.

person Thomas Q    schedule 28.08.2019
comment
Kelas karakter [:digit:] mungkin lebih aman daripada 0-9. Kemudian Anda dapat mempertimbangkan untuk menangani read -r decimal_point thousands_sep < <(locale LC_NUMERIC) untuk memasukkan ini ke dalam pola Anda. - person Léa Gris; 29.08.2019
comment
Terima kasih, itulah yang saya Butuhkan. Aku bersyukur ! - person ShamanWarrior; 29.08.2019

Silakan gunakan pola regex: \b([0-9])*\b

Ini akan membantu Anda memahami baris yang hanya berisi angka.

Sekarang untuk mengekstrak nama file dari output di atas Anda dapat cut memerintahkan, dengan piping output dari grep? tocut`, yaitu.

cat data.txt | grep \b([0-9])*\b | cut -f 1 -d ":"

Di sini saya berasumsi Anda telah menyimpan daftar nama file Anda di file data.txt.

Opsi yang digunakan di grep:

  • \b -- batas kata
  • [0-9] -- hanya cocok dengan satu digit
  • () -- pengelompokan

Opsi yang digunakan di cut:

  • f -- untuk memilih bidang
  • d -- untuk menentukan pembatas
person nocut    schedule 29.08.2019
comment
cat tidak berguna dan mengambil teks, bukan nama file, dari data.txt. - person tripleee; 29.08.2019
comment
Selain itu, argumen pada grep bukanlah pilihan. - person tripleee; 29.08.2019

awk ini harus dilakukan:

awk '!/[^0-9]/ {print FILENAME}' FILE*
awk '!/[a-zA-Z]/ {print FILENAME}' FILE*
FILE1

Ini akan mencetak semua Filenames dari file yang hanya berisi angka

person Jotne    schedule 29.08.2019