이 명령은 sed -e 's/\(~\).*\(~\)//
텍스트 파일로 무엇을 합니까? 난 이해가 안 돼요. 직장에서 만난 적이 있어요.
답변1
이 명령(끝부분에 누락된 작은따옴표를 추가하는 경우)은 파일의 모든 줄을 터미널에 인쇄하지만 ~
줄에 최소한 두 개의(물결표) 문자가 있는 경우 첫 번째와 마지막 사이의 비트는 바꾸기를 ~
통과합니다 . s
를 삭제하려면 명령( )을 입력하세요 sed
.
예:
$ cat file
1 2 3 ~ 4
1~2~3
Here is ~ the last ~ line ~ THE END
$ sed -e 's/\(~\).*\(~\)//' file
1 2 3 ~ 4
13
Here is THE END
하지만 \(
필수는 아니며 \)
(표현식에 역참조가 사용되지 않기 때문에) -e
생략할 수도 있습니다(표현식이 하나뿐이므로). 따라서 명령은 다음과 동일합니다.
sed 's/~.*~//' file
그래서 그렇지 않습니다하다파일 자체의 모든 내용. 그러나 파일 내용을 읽고 수정하여 처리된 텍스트를 생성한 다음 sed ... >newfile
리디렉션()을 사용하여 새 파일에 저장할 수 있습니다.
역참조할 수 있다이 명령에서 다음과 같이 사용하세요.
sed 's/\(~\).*\1//' file
즉, a 와 일치 하고 다른 텍스트와 일치한 다음 첫 번째 그룹 (물결표) ~
에서 일치한 것과 동일한 것과 일치합니다 . \(...\)
그러나 이는 입력 시간을 절약하지 못하며 명령을 유지 관리하거나 이해하기 쉽게 만들지도 않으므로 에는 유용하지 않습니다 sed 's/~.*~//' file
.