![sed를 사용하여 시작과 끝을 삭제하는 방법은 무엇입니까?](https://linux55.com/image/204508/sed%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%8B%9C%EC%9E%91%EA%B3%BC%20%EB%81%9D%EC%9D%84%20%EC%82%AD%EC%A0%9C%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
내 경로에서 첫 번째 ./와 뒤따르는 /를 어떻게 제거합니까?
이제 내 코드는 다음과 같습니다.
sed -i 's/dir2\/file-example.json//' test.sh
다음과 같이 인쇄됩니다.
./dir1/
하지만 나는 이것을 원한다:
dir1
이렇게 하면 처음과 끝에서 ./ 및 /를 제거하고 디렉터리 이름만 남깁니다.
가능합니까?
답변1
정규식 구분 기호로 사용할 필요는 없지만 /
"다른 단일 문자"로 대체할 수 있습니다. 이를 이스케이프 처리하세요. info sed
:
'\%REGEXP%' ('%'는 다른 단일 문자로 대체될 수 있습니다.)
This also matches the regular expression REGEXP, but allows one to use a different delimiter than '/'.
대체 명령 에서는 s
도망갈 필요도 없습니다. 노력하다
sed -i 's%\./%%; s%/dir2/file-example.json%%;' test.sh
정규 표현식에서 점의 특별한 의미를 끄려면 점도 이스케이프 처리해야 합니다.
"역참조"를 사용하면 훨씬 더 간단해질 수 있습니다.
sed -i 's%\./\(dir1\)/dir2/file-example.json%\1%;' test.sh
이는 \1
괄호로 묶인 첫 번째 부분 정규식(여기서는 dir1)을 다시 참조합니다.