다음과 같은 로그 파일이 있습니다.
########### mv90_poll.sh started Wed Sep 23 02:36:00 PDT 2015 ############
/usr/mv90/mv90/system/*.di not found
list *.HHF files in /usr/mv90/fats
-rw------- 1 cdas cdas 6 Jan 12 2015 MO994001.HHF
-rw------- 1 cdas cdas 189440 Jan 12 2015 MO994002.HHF
-rw-rw-r-- 1 samalrr cdas 12800 Sep 22 13:30 TU994001.HHF
.HHF
모든 파일을 Excel 형식의 다른 파일로 추출하는 스크립트를 작성하는 방법이 궁금합니다 .
답변1
사용 grep
:
grep -oP '[A-Z]{2}[0-9]{6}\.HHF$' file >newfile
.HHF
이 파일의 이름은 대문자 2개( )로 시작하고 숫자 [A-z{2}]
6개( [0-9]{6}
), .HHF
.
이 -o
플래그는 grep
전체 라인이 아닌 패턴의 일치하는 부분만 인쇄되도록 합니다. -P
Perl 호환 정규식을 활성화합니다.
답변2
동일한 작업을 수행하는 grep 명령의 또 다른 예:
$ grep -oE '[[:upper:]]{2}[[:digit:]]{8}\.HHF' the_log_file.log > hhf_list.txt
hhf_list.txt:
$ cat hhf_list.txt
MO994001.HHF
MO994002.HHF
TU994001.HHF
어떻게 작동하나요?
- -o @chaos가 언급한 일치하는 텍스트만 표시합니다.
- -E는 확장된 정규식을 사용하므로 이스케이프 없이
{
및 (중괄호)를 입력할 수 있습니다. 기본 grep에서는 동일한 효과를 얻기 위해 쓰기 및 중괄호가 필요합니다.}
\{
\}
- 저는 POSIX 스타일을 선호합니다. POSIX 스타일이
[[:upper:]]
[[:digit:]]
더 눈에 띄고, 내용과 개수가 일치하고{2}
,{6}
- .txt 확장자를 가진 파일 이름은 선택 사항이지만 텍스트 파일이라는 점을 기억하는 데 도움이 되며 나중에 Windows 컴퓨터에서 Excel을 사용하는 경우 도움이 될 수 있습니다.
답변3
sed에서 유사한 정규식 절차를 수행하려면 다음을 수행하십시오.
sed -n 's/.* \([^\s]\{2,\}\.HHF\)/\1/p' log.txt > files.txt
sed의 기본 동작은 제공한 파일(이 경우 log.txt)의 모든 줄을 인쇄하는 것입니다. 이 -n
플래그는 이 동작을 끕니다. 이 s/REGEXPATTERN/REPLACEMENT/
명령은 하위 문자열이 일치하는 행을 찾아 REGEXPATTERN
로 바꿉니다 REPLACEMENT
. 멋진 대체를 수행하기 위한 sed의 도우미 명령의 예는 \#
괄호 안의 -th 부분#
과 일치하는 행을 바꾸는 정수입니다. 1부터 시작하는 행의 하위 문자열입니다. . 이 경우 공백이 아닌 두 개 이상의 문자가 뒤에 오는 줄 부분으로만 구성된 전체 줄을 대체합니다. 마지막으로 명령은 수정된 줄을 인쇄합니다. 이 경우에는 파일 이름만 인쇄됩니다. 그런 다음 출력을 한 줄에 하나씩 모든 파일 이름을 저장할 텍스트 파일로 파이프합니다. 이 sed 명령은 파일에 .HHF가 끝나기 전에 최소 두 문자가 있고 파일 이름 앞에 공백이 하나 이상 있다고 가정합니다.#
REGEXPATTERN
.HHF
p
>