sed -e 's/\(~\).*\(~\)// 명령은 텍스트 파일에서 어떤 작업을 수행합니까?

sed -e 's/\(~\).*\(~\)// 명령은 텍스트 파일에서 어떤 작업을 수행합니까?

이 명령은 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.

관련 정보