AWK komutuna Birden Çok Arama nasıl eklenir


10

Im Haziran, Temmuz ve Ağustos aylarında oluşturulan dosyaları aramaya çalışıyorum. Bu yöntemi kullandım

ls -lrth|awk '/[Jun][Jul][Aug]/ {print}'

ama çalışmıyor.


1
Kayıt için [...]yapı, köşeli ayraçlar arasındaki karakterlerden herhangi biri olabilen tek bir karakterle eşleşir. Dolayısıyla ifadeniz eşleşmeyi umuyor JJA veya Jug( Jkimden [Jun], ukimden [Jul]ve gkimden [Aug]), ancak eşleştirmeyi umduğunuz ay kısaltmalarıyla eşleşmiyor.
tripleee

Yanıtlar:


12

Şunun gibi birden çok desenle eşleşebilirsiniz:

awk '/Jun/ || /July/ || /Aug/' <(ls -lrh)

Bu, Haziran, Temmuz veya Ağustos ayları için tüm eşleşmeleri döndürür . Bunun varsayılan işlem printolduğu için ifadeye ihtiyacınız yoktur awk.


1
awk genişletilmiş normal ifadeleri anlar, bu yüzden awk '/Jun|Jul|Aug/'ya da şöyle yazabildiğiniz kadar basit bir desen içinawk '/Ju[nl]|Aug/'
cas

5

Genel bir kural olarak, ls çıktısını ayrıştırmak çok kötü bir fikirdir . İstediğinizi yapmanın daha iyi bir yolu

stat -c "%n %y" * | grep 2013-0[678]

Alternatif olarak, dosya adının kendisinin bir tarih olduğu olası durumdan korunmak için yalnızca son alanı kontrol edin:

stat -c "%n %y" *| awk '$NF ~ /2013-0[678]/' 

Gönderen man stat:

   -c  --format=FORMAT
          use the specified FORMAT instead of the default; output  a  new
          line after each use of FORMAT

   %y     time of last modification, human-readable
   %n     file name

Aynı zamanda iyi bir örnek. Daha önce STAT'u hiç kontrol etmedim. bilgi için teşekkürler
OmiPenguin

Belki | awk '$NF ~ /2013-0[678]/'bir tarih olarak olmasa bile bir dosyanın adının normal ifadeyle eşleştiğini (olası değil?) Yalnızca son çıktı alanını kontrol etmek için ... olarak değiştirin .
tripleee

3

lsokunabilir bir dosyadaki dosyalar hakkında bilgi görüntüleme komutudur. Komut dosyalarında kullanmayın .

Bir dizin ağacında belirli ölçütlerle eşleşen dosyaları bulma komutu find. GNU bulmanız (yani gömülü olmayan Linux veya Cygwin) veya FreeBSD bulmanız (yani FreeBSD veya OSX) varsa, -newermtbelirli bir tarihten sonra en son değiştirilen dosyaları eşleştirmek için kullanabilirsiniz .

find . -newermt '1 June' ! -newermt '1 September' -print

Komut dosyasının çalıştığı takvim yılı yerine belirli bir yıldaki dosyaları eşleştirmek istiyorsanız bir yıl ekleyin.

Bulma uygulamanız yoksa -newermt, sabit bir dosyayla bulunan -newerdosyanın tarihini karşılaştıran işlem yapmanız gerekir find. kullanmak touchbir sınırı olarak kullanmak istediğiniz tarihle geçici dosyaları oluşturmak için.

dir=$(mktemp -d)
touch -d 201306010000 "$dir/from"
touch -d 201309010000 "$dir/to"
find . -newer "$dir/from" ! -newer "$dir/to" -print
rm -r "$dir"
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.