문자열에서 ".sh" 스크립트를 추출하고 형식을 다시 지정합니다.

문자열에서 ".sh" 스크립트를 추출하고 형식을 다시 지정합니다.

다음과 같은 문자열이 있습니다.

%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

관련 정보