다음과 같은 문자열이 있습니다.
%group1 ALL=(ALL) /ora/crs/oracle/product/crs/bin/gsdctl *,/ora/crs/oracle/product/crs/bin/vipca,/ora/app/oracle/ora/Root.sh,/ora/crs/oracle/product/crs/root.sh,/ora/crs/oracle/product/crs/bin/srvctl *,/ora/app/oracle/product/root.sh
출력은 다음과 같아야 합니다. (.sh 스크립트만 인쇄)
/ora/app/oracle/ora/Root.sh
/ora/crs/oracle/product/crs/root.sh
/ora/app/oracle/product/root.sh
답변1
이 예에서는 쉼표가 절대 경로를 구분하는 데만 사용되기 때문에 이 방법도 작동합니다.
grep -o '/[^,]*\.sh' file
답변2
귀하의 라인이 파일의 유일한 라인이라고 가정하면 file
다음을 사용할 수 있습니다.sed
cat file | sed 's/,/\n/g' | sed -n '/\.sh$/ p'
첫 번째 sed
명령은 모든 쉼표를 줄 바꿈으로 바꾸고 두 번째 명령은 로 끝나는 모든 줄을 인쇄합니다 .sh
. 따라서 다음 없이도 할 수 있습니다 sed
.
cat file | tr ',' '\n' | grep '\.sh$'
답변3
대안은 없지만 sed
여전히 경로/파일 이름에 쉼표가 들어갈 수 있습니다.
grep -Po "(?<=[, ])[^,]*\.sh(?=,|$)" test