AWK 명령에서 여러 검색을 추가하는 방법


10

6 월, 7 월, 8 월에 만들어진 파일을 검색하려고합니다. 이 방법을 사용했습니다

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

하지만 작동하지 않습니다.


1
레코드의 경우 [...]구문은 단일 문자와 일치하며 대괄호 사이의 문자 중 하나 일 수 있습니다. 따라서 표현식은 JJA 또는 Jug( Jfrom [Jun], ufrom [Jul]gfrom [Aug]) 과 일치 하지만 일치시키려는 달 약어는 일치하지 않습니다.
tripleee

답변:


12

여러 패턴에서 다음과 같이 일치시킬 수 있습니다.

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

6 월, 7 월 또는 8 월의 모든 일치 항목을 리턴합니다 . 기본 조치 print이므로 명령문이 필요하지 않습니다 awk.


1
AWK 그래서 당신이 그것을 쓸 수있는 것과 같은 간단한 같은 패턴, 확장 regexps '에 이해 awk '/Jun|Jul|Aug/'awk '/Ju[nl]|Aug/'
CAS

5

일반적 으로 ls의 출력구문 분석 하는 것은 매우 나쁜 생각 입니다. 원하는 것을하는 더 좋은 방법은

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

또는 파일 이름 자체가 날짜 인 경우를 막기 위해 마지막 필드 만 확인하십시오.

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

보낸 사람 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

좋은 예이기도합니다. 전에 STAT를 확인한 적이 없습니다. 좋은 정보 주셔서 감사합니다
OmiPenguin

날짜가 일치하지 않더라도 | awk '$NF ~ /2013-0[678]/'파일 이름 이 정규식과 일치 하더라도 ( 아마도 ?)에서 마지막 출력 필드 만 확인하려면 ... 로 변경 하십시오 .
tripleee

3

ls사람이 읽을 수있는 파일 정보를 표시하는 명령입니다. 스크립트에서는 사용하지 마십시오 .

디렉토리 트리에서 특정 기준과 일치하는 파일을 찾는 명령은 find입니다. GNU 찾기 (즉, 내장되지 않은 Linux 또는 Cygwin) 또는 FreeBSD 찾기 (예 : FreeBSD 또는 OSX) -newermt가있는 경우 특정 날짜 이후에 마지막으로 수정 된 파일을 일치시키는 데 사용할 수 있습니다 .

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

스크립트가 실행되는 연도가 아닌 특정 연도의 파일과 일치 시키려면 1 년을 추가하십시오.

찾기 구현에가 없으면 고정 파일로 찾은 파일의 날짜를 비교하는 -newermt을 수행해야 합니다. 사용 당신이 경계로 사용하려는 날짜와 임시 파일을 만들 수 있습니다.-newerfindtouch

dir=$(mktemp -d)
touch -d 201306010000 "$dir/from"
touch -d 201309010000 "$dir/to"
find . -newer "$dir/from" ! -newer "$dir/to" -print
rm -r "$dir"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.