빅 데이터가 있고 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
인 괄호 안의 부분(첫 번째 캡처 그룹, 다음으로 표시됨)으로만 대체합니다 . 한 번만 발생하는 것으로 가정됩니다 .\1
at
at
입력 예의 경우 출력은 다음과 같습니다.
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