grep을 사용하여 일치하는 항목이 발견되면 해당 파일의 첫 번째 n 문자뿐 아니라 파일 이름도 인쇄합니다. n
은 지정할 수있는 매개 변수이며 첫 번째 n 개의 문자에 실제로 일치하는 문자열이 포함되는지 여부는 중요하지 않습니다.grep을 사용하여 Linux에서 파일 이름과 처음 n 문자를 인쇄합니다.
답변
원하는 결과를 얻으려면 grep의 출력을 sed로 파이프해야합니다. 다음은 예입니다.
grep mypattern *.txt | sed 's/^\([^:]*:.......\).*/\1/'
도트 수는 인쇄 할 문자 수입니다. 많은 버전의 sed는 -r (GNU/Linux) 및 -E (FreeBSD)와 같은 옵션을 제공하여 모던 스타일의 정규 표현식을 사용할 수 있도록합니다. 이렇게하면 인쇄 할 문자의 수를 숫자로 지정할 수 있습니다.
N=7
grep mypattern *.txt /dev/null | sed -r "s/^([^:]*:.{$N}).*/\1/"
이 솔루션은 다른 프로세스가 여러 프로세스를 호출하는 데 훨씬 효율적이라는 점에 유의하십시오.
'n 개의 줄'대신 'n 개의 문자'를 인쇄하는 도구는 거의 없습니다. 정말로 문자가 아닌 선을 원하십니까? 모든 것이 Perl에서 가장 잘 수행 될 수 있습니다. (grep
사용) 지정, 우리는 할 수 있습니다
pattern="$1"
shift
n="$2"
shift
grep -l "$pattern" "[email protected]" |
while read file
do
echo "$file:" $(dd if="$file" count=${n}c)
done
따옴표는 약 $file
제대로 파일 이름에 여러 공간을 보존 할 수 있습니다. 우리는 현재 (명령 이름이 'ngrep
'입니다 가정), 명령 줄 사용을 토론 할 수
ngrep pattern n [file ...]
내가 'head -c $n
을'@litb 사용 있습니다; 내가 사용한 dd
명령보다 깔끔합니다. head
이없는 시스템이있을 수 있습니다 (그러나 그들은 꽤 고풍 것입니다). POSIX 버전 head
은 -n
과 행 수만 지원합니다. -c
옵션은 아마도 GNU 확장입니다.
grep -l pattern *.txt |
while read line; do
echo -n "$line: ";
head -c $n "$line";
echo;
done
변경 -n
--c
대신 바이트의 첫 번째 n
라인을보고 싶다면. 여기
두 가지 생각 : 효율 우려 (즉 이제까지 일어날 것 같은) 아니었다면
이1), 각 파일에 그렙를 실행 한 후 $ 상태 [CSH]을 확인할 수 있습니다. 예컨대은 :
foreach FILE (file1 file2 ... fileN)
grep targetToMatch ${FILE} > /dev/null
if ($status == 0) then
echo -n "${FILE}: "
head -c25 ${FILE}
endif
end
2 (N자 = 25. 들어))은 GNU [FSF]헤드는 --verbose[-v] 스위치를 포함한다. 또한 공백으로 파일 이름을 조정하기 위해 --null을 제공합니다. "-c"과 같은 파일 이름을 처리하려면 '-'이 있습니다.그래서 당신은 할 수있다 :
grep --null -l targetToMatch -- file1 file2 ... fileN |
xargs --null head -v -c25 --
내 리눅스 머신에서 sed는 -E (grep does)를 받아들이지 않는다. 그러나 -r –
과 함께 작동합니다. 파일의 처음 N자를 찾고 일치하는 N자를 찾지 않습니다. 또한 * .txt가 0 또는 1 개의 파일을 평가할 경우/dev/null을 거기에 추가하십시오. 예 : grep mypattern * .txt/dev/null | sed ... –
내가 제공 한 확장 된 RE 패턴은 N 문자보다 적은 수의 줄과 일치하지 않으므로 사양에 따라 올바르게 인쇄됩니다./dev/null 인수를 추가해야 할 필요가 있습니다. –