Bash 스크립트를 작성하는 중에 문제가 발생했습니다. grep출력 할 때 (보통) 많은 줄을 반환합니다. 이 출력 라인 각각에 문자열을 접두사로 붙이고 싶습니다.
나는 또한 배관있어주의 하시겠습니까 ls으로 grep같은 :
ls | grep
Bash 스크립트를 작성하는 중에 문제가 발생했습니다. grep출력 할 때 (보통) 많은 줄을 반환합니다. 이 출력 라인 각각에 문자열을 접두사로 붙이고 싶습니다.
나는 또한 배관있어주의 하시겠습니까 ls으로 grep같은 :
ls | grep
답변:
sed로 :
ls | grep txt | sed 's/.*/prefix&suffix/'
sed의 상위 집합 인 grep: ls | sed -n '/txt/s/.*/prefix&suffix/p'나ls | sed -n 's/.*txt.*/prefix&suffix/p'
로 sed:
ls | grep pattern | sed -e 's/^/prefix/' -e 's/$/suffix/'
그러나 이것은 줄 바꿈으로 파일 이름에 문제가 있고 ls일반적으로 나쁜 생각 인 모든 구문 분석 문제가 있습니다.
펄로
perl -e 'print "prefix".$_."suffix\n" for grep { m/somepattern/} glob "*"'
참고-perl grep은 grep명령 과 같은 패턴을 취할 수 있지만 파일 테스트 적용과 같은 작업을 수행 할 수도 있습니다.
예 :
grep {-d} glob "*" #filters directories.
grep { (stat)[9] > time() - 60 } glob "*" #reads file mtime and compares.
grep기본 반복자 내 에서 $_현재 요소 값으로 설정되므로 정규식을 적용 sed/ grep스타일하거나에 따라 다양한 작업을 수행 할 수 있습니다 $_.
“em을 사용하십시오.
이 경우 GNU를 find사용하면 이러한 모든 작업을 한 번에 수행 할 수 있으므로 파이프를 제거하고 잠재적으로 문제를 해결할 수 있습니다.ls .
find . -maxdepth 1 -name '[^.]*' \
-regextype posix-extended -regex "MYPATTERN" \
-printf 'SOMEPREFIX %f SOMESUFFIX\n'
(find 물론 다른 명령의 출력을 임의로 수정하는 좋은 방법은 아닙니다!)
몇 가지 참고 사항 :
-maxdepth 1및 -name [^.]*일반 등의 메이크업 이름과 일치하는 작업과 동일한 ls(또는 ls .). 쉘 스타일 글로브를 사용할 수 있지만 "*"는 선행 "."과 일치합니다. 이름에 † 달리가 bash, 그래서 [^.]*아무것도 그 의미 "" 가없는 합니다..*thing.*대신 단지thing-name/ -regex[^.] "예를 들어 -regex (대신 모두의. MYPATTERN을. "-printf지원의 많은 일들은 , %n아무 것도 추가되지 않은 파일이나 디렉토리 이름입니다† (사용중인 버전에 따라 다를 수 있습니다.
find있습니다. 맨 페이지의 "표준 준수"섹션을 확인하십시오.)
필요없이 외부 프로그램에 발생할 수있는 대안으로 bash이 compgen에 globs와 동등한를 확장, 다른 것들 사이에있는, ls어떤 옵션 :
compgen -P "someprefix>" -S "<somesuffix" -G "pattern"
줄 바꿈을 포함하여 공백이있는 파일 이름을 처리합니다. compgen -G "*"일반과 동일한 출력을 제공해야합니다 ls(단, ls *완전히 다른 것임). 당신은 여전히 필요 grep하며, 이것은 문제를 해결하거나하지 않을 수 있지만 언급 할 가치가 있습니다.
ls-나쁜 주주입니다. 또한 있어야grep합니까? 그리고 예제 출력을 줄 수 있습니까?