grep 고양이 결과

grep 고양이 결과

grep 검색 결과를 연결하려고 합니다. 내 grep 검색은 내 시스템에서 약 4개의 파일을 찾아 각 파일에 대해 새 줄에 출력했습니다. 나는 이 정보를 전달함으로써 tr '\n' ' '검색에 포함된 모든 파일을 한 줄로 가져온 다음 이를 cat > bigfile큰 파일에 전달하여 검색에 포함된 모든 파일의 내용을 포함할 수 있다고 생각했습니다. 대신 bigfilegrep에서 찾은 파일 목록만 포함됩니다.

bigfilegrep으로 찾은 모든 파일의 연결을 포함하는 방법 .

이것은 내가 시도한 코드입니다.

egrep -Rl 'users.*log|log.*users' /home/moose/test | tr '\n' ' ' | cat > bigfile

그런 다음 다음 bigfile을 포함합니다.

/home/moose/test/file1 /home/moose/test/2 /home/moose/test/3 /home/moose/moose/file4 

감사해요

답변1

연결을 시도하면콘텐츠파일을 단일 와 일치시키면 파일 이름을 다른 인수 bigfile로 전달해야 합니다 . 다음을 사용할 수 있습니다.catxargs

egrep -ZRl 'users.*log|log.*users' /home/moose/test | xargs -0 cat

-Z및 플래그를 추가하면 -0널 구분 기호가 포함된 이름이 전달되므로 명령이 모든 유효한 파일 이름(공백이나 개행 문자가 포함된 이름 포함)을 처리할 수 있습니다.

답변2

  1. cat여기서 할게 없어. 단순히 출력을 리디렉션하는 것은 tr출력을 파이프로 연결하여 리디렉션하는 것과 사실상 동일합니다 cat.

  2. paste대신 시도해 보세요 tr.

    egrep -Rl 'users.*log|log.*users' /home/moose/test | paste -sd' ' > bigfile

  3. xargs또한 작동하며 명령줄의 최대 길이에 도달하면 출력을 여러 줄로 분할할 수 있다는 장점이 있습니다.

    egrep -Rl 'users.*log|log.*users' /home/moose/test | xargs > bigfile

그런데, 파일이 한 줄에 하나씩 나열되는지 아니면 모두 한 줄에 나열되는지가 왜 중요한가요? 이것을 다른 프로그램의 명령줄에서 사용하거나 또는 for루프 에 대한 입력 으로 사용할 계획이라면 while어쨌든 한 줄에 하나의 파일 이름을 사용하는 것이 더 나을 수 있습니다. 특히 파일 이름에 공백 문자가 있는 파일이 있는 경우에는 더욱 그렇습니다.

답변3

마지막 파이프 /cat이 필요하지 않습니다. tr 다음의 파일로 직접 리디렉션할 수 있습니다.

다음과 같은 코드를 사용할 수 있습니다.

egrep -Rl '사용자. *로그|로그. *user' /home/moose/test | tr '\n' ' ' > 대용량 파일

그러면 다음이 제공됩니다.

/홈/무스/테스트/파일1 /홈/무스/테스트/2 /홈/무스/테스트/3 /홈/무스/무스/파일4

답변4

paste- s(직렬화) 옵션을 사용하여 모든 행을 단일 행으로 가져올 수 있습니다.

귀하의 경우:

grep .... | paste -sd'\t'

여기서는 -t구분 기호를 의미하고, 여기서 탭 문자는 구분 기호로 사용되므로 필요에 맞게 변경하세요.

예:

% printf 'foo\nbar\nspam\negg\n'               
foo
bar
spam
egg

% printf 'foo\nbar\nspam\negg\n' | paste -sd' ' 
foo bar spam egg

% printf 'foo\nbar\nspam\negg\n' | paste -sd'\t'
foo   bar   spam    egg

관련 정보