문자열에서 처음 3개 폴더를 자르는 방법은 무엇입니까?
예를 들어:
echo "/home/source/Oracle/test" |cut -d'/' -f4
폴더 이름은 하나만 제공되지만 다음과 같은 최대 세 번째 폴더가 필요합니다.
echo "/home/test/var/opt" | ... command here ...
반환해야/home/test/var
답변1
사용cut -d "/" -f1-4
ebvjr@Maintenance:~$ echo /home/test/var/opt | cut -d "/" -f1-4
/home/test/var
답변2
cut
@ebvjr이 말했듯이 좋습니다. 첫 번째 필드가 비어 있으므로 4개의 필드가 필요하다는 점만 기억하세요.
그렇다면 grep
코드는 더 길지만 아마도 더 직관적일 것입니다( {3}
=세 번째 하위 폴더).
grep -Po "(/[^/]+){3}" <<<"/home/test/var/opt"
/home/test/var
답변3
나는 다음 awk 메소드를 사용하여 이 작업을 수행했습니다.
주문하다
echo "/home/test/var/opt"| awk -F "/" 'OFS="/"{print $1,$2,$3,$4}'
산출
/home/test/var
답변4
일반적으로 경로 이름은 줄 기반 텍스트 편집 유틸리티가 아닌 유틸리티 basename
및 /또는 매개변수 대체를 통해 수정됩니다 .dirname
cut
sed
이는 기술적으로 경로 이름에 개행 문자가 포함될 수 있기 때문에 (또는 또는 등) 과 같은 줄 기반 도구를 사용하여 안정적으로 작업하기가 어렵기 때문입니다 awk
.
당신이 가진 예는 상위 디렉토리의 경로 이름을 얻는 것입니다 /home/test/var/opt
. 이렇게하는 것이 더 좋습니다
dirname /home/test/var/opt
이렇게 하면 반환할 수 있습니다 /home/test/var
. 이는 주어진 경로 이름 /
끝에 이 있는 경우에도 작동합니다.