사용 sed
:
sed 's/^[^"]*"\([^"]*\)".*/\1/'
그것은 선의 시작, 일련의 따옴표가 아닌, 큰 따옴표, 일련의 따옴표가없는 것, 큰 따옴표 및 그 밖의 다른 것을 포착하여 캡처 된 자료로 대체합니다.
$ sed 's/^[^"]*"\([^"]*\)".*/\1/' <<'EOF'
> xyz... rsync: "/home/path/to/file": Permission denied (13) rsync:
> "/home/path/to/file1": Permission denied (13) rsync:
> "/home/path/to/file2": Permission denied (13) rsync:
> "/home/path/to/file3": Permission denied (13)
> EOF
/home/path/to/file
/home/path/to/file1
/home/path/to/file2
/home/path/to/file3
$
GNU sed
를 사용하여 RHEL 5 Linux에서 테스트 하되 7th Edition UNIX ™ 버전에서 작동했던 기능 만 사용하십시오 sed
.
덧붙여서, 약간 간단한 방법은 두 개의 대체 명령을 사용하는 것입니다. 첫 번째 큰 따옴표를 포함하여 모든 것을 빈 문자열로 변경하십시오 (0 개 이상의 따옴표가 아닌 순서와 큰 따옴표가 이어짐). 이제 첫 번째 큰 따옴표 뒤에있는 것을 모두 변경하십시오.
sed 's/^[^"]*"//; s/".*//'
또한, 시도한 명령 (`sed -n '/ "/, /"/ p')은 줄을 전혀 편집하지 않고 큰 따옴표를 포함하는 한 줄에서 큰 따옴표를 포함하는 다음 줄로 인쇄합니다. 그것이 당신을 위해 효과가없는 것처럼 보이는 이유입니다. 그것은 당신이 요구 한 것을했지만, 당신이 그것을 요구 한 것은 당신이하고자하는 것이 아니 었습니다.
효율성 측면에서 성능에는 큰 차이가 없을 것입니다. 유지 보수의 용이성 측면에서, 나는 후자가 뇌 세포에 대한 과세가 적다고 생각합니다.