문장 끝에서 "at" 뒤에 있는 텍스트를 삭제하는 방법은 무엇입니까?

문장 끝에서 "at" 뒤에 있는 텍스트를 삭제하는 방법은 무엇입니까?

빅 데이터가 있고 grep이 문장에서 텍스트를 제거하고 직함을 유지하는 명령을 찾고 있습니다. 이 grep 명령을 사용하여 ^.*?at단어 뒤에 회사 이름을 가져왔지만 at이번에는 직위를 유지하고 싶습니다. grep명령을 사용해야 합니까?

CEO at Insurance Menu
Founder & CEO at insurtech
AVP, Alliances and Analyst Relations  at ValueMomentum
AGV-President at Aflac Ventures

예를 들어 첫 번째 줄의 최종 결과는 이어야 하며 CEO, 단어에서 전체 텍스트를 제거해야 합니다.at Insurance Menu

BBEDIT(모두 찾기 및 바꾸기) 기능을 사용하고 있습니다.

답변1

고쳐 쓰다질문 편집에서 BBEdit의 찾기 및 바꾸기 옵션을 사용하는 방법이 자세히 설명되어 있습니다. 이는 이 답변에서 제안된 원래 솔루션을 다소 무효화합니다.

BBEdit의 찾기 및 바꾸기 기능을 사용한 후 텍스트를 제거하려면 대체 텍스트에 검색 패턴의 포함 하위 패턴에 대한 역참조가 포함될 수 있다는 사실을 at활용할 수 있습니다 . (...)따라서 귀하의 목적에 따라 사용할 수 있습니다

(.*) at .*

~처럼찾다모드 ( Grep활성화 옵션) 이전의 모든 것이 at"캡처 그룹"에 저장 되도록

\1

이것은 단지 "캡처 그룹"의 내용일 뿐입니다.바꾸다텍스트. 이것은 sed본질적으로 아래 답변의 원래 버전에서 제안된 것과 동일한 솔루션입니다.


원래 답변

입력 파일의 이름이 이라고 가정해 보겠습니다 contact-details.txt.

sed한 가지 접근 방식은 아래와 같이 를 사용하는 것입니다 .

sed -E 's/(.*) at .*/\1/' contact-details.txt

이는 ERE(편의상) 및 캡처 그룹을 사용하여 전체 줄을 해당 줄(마지막 줄) 앞의 텍스트 s인 괄호 안의 부분(첫 번째 캡처 그룹, 다음으로 표시됨)으로만 대체합니다 . 한 번만 발생하는 것으로 가정됩니다 .\1atat

입력 예의 경우 출력은 다음과 같습니다.

CEO
Founder & CEO
AVP, Alliances and Analyst Relations
AGV-President

또 다른 방법은 다음 grep과 같이 사용하는 것입니다.Perl 호환 정규식구문 및 "공격적 예측"을 활성화합니다.

grep -Po '.*(?= at )' contact-details.txt

이는 앞에 오는 모든 텍스트와 일치하며 옵션 at덕분에-o오직이 텍스트를 인쇄하고 at그 뒤의 내용은 모두 삭제합니다. at작동하려면 회선에 하나만 있어야 한다는 동일한 제한이 있습니다 .

답변2

at양쪽에 공백이 있는 단어와 그 뒤에 있는 모든 단어를 제거하려면 다음을 수행하십시오.

sed 's/ at .*//' file1.txt

예제 텍스트가 주어지면 다음이 생성됩니다.

CEO 
Founder & CEO 
AVP, Alliances and Analyst Relations  
AGV-President

관련 정보