sed -e 's/\(~\).*\(~\)// 명령은 텍스트 파일에 무엇을 합니까?

sed -e 's/\(~\).*\(~\)// 명령은 텍스트 파일에 무엇을 합니까?

명령은 sed -e 's/\(~\).*\(~\)// 텍스트 파일에 무엇을 합니까? 나는 그것을 이해하지 못한다. 나는 그것을 내 작업에서 발견했습니다.

답변1

명령(끝 부분에 누락된 작은따옴표를 추가하는 경우)은 파일의 모든 줄을 터미널에 인쇄하지만 줄에 최소한 두 개의(물결표) 문자가 있는 경우 첫 ~번째와 마지막 사이의 비트는 에서 대체 명령( ) ~을 사용하여 제거됩니다 .ssed

예:

$ 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

그러나 and \(\)필요하지 않으며(표현식에 역참조가 사용되지 않기 때문에), the도 -e생략할 수 있습니다(표현식이 하나뿐이므로). 따라서 명령은 다음과 동일합니다.

sed 's/~.*~//' file

그래서 그렇지 않습니다하다파일 자체에는 아무 것도 없지만 파일 내용을 읽고 수정하여 처리된 텍스트를 생성한 다음 리디렉션( sed ... >newfile)을 사용하여 새 파일에 저장할 수 있습니다.


역참조~할 수 있었다다음과 같이 이 명령에 사용됩니다.

sed 's/\(~\).*\1//' file

즉, a를 일치시킨 ~다음 다른 텍스트를 일치시키고 첫 번째 \(...\)그룹에서 일치한 것과 동일한 것(물결표)을 일치시킵니다. 그러나 이는 입력 시간을 절약하거나 명령을 유지 관리하거나 이해하기 쉽게 만들지 않으므로 에서 개선되지 않습니다 sed 's/~.*~//' file.

관련 정보