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
합니까? 그리고 예제 출력을 줄 수 있습니까?