텍스트 파일에서 문자 패턴(패턴 포함) 뒤의 모든 내용(모든 줄)을 제거하는 방법은 무엇입니까?

텍스트 파일에서 문자 패턴(패턴 포함) 뒤의 모든 내용(모든 줄)을 제거하는 방법은 무엇입니까?

기본적으로 이 질문의 OP가 얻지만 원하지 않는 것이 필요합니다. 파일에서 특정 패턴이나 문자열 뒤의 모든 항목을 제거하는 방법은 무엇입니까?

그래서 내가 얻은 데이터는 다음과 같습니다.

Something and something ........................... 23
Another one .......................................123
Somethingelse Inc. .................................243

그래서 제가 원하는 것은 공백을 제거한 후의 전체 점(및 숫자)입니다.

지금까지 거기에서 OP 명령을 사용해 보았지만 처음 만난 지점 이후의 모든 항목을 삭제하기 때문에 예상대로 작동하지 않습니다. 이는 Somethinelse Inc. 카테고리 데이터의 포인트도 삭제된다는 의미입니다.

나는 첫 번째 .com을 세 개의 점으로 바꾸고 두 번째 .com을 공백으로 대체하여 이 질문에 대한 첫 번째(sed) 답변이 작동하도록 시도했지만 실패했습니다. 이번에는 첫 번째 공백을 제거하거나 세 개의 점 뒤에 있는 모든 내용을 그대로 둡니다.

두 번째 답변(예: -sc...)은 OP가 원하는 대로 수행되지만 몇 가지 포인트가 남아 있으므로 운이 좋지도 않습니다.

또한 이 답변을 기반으로 명령을 적용하려고 시도했지만 실패했습니다.행에서 한 패턴 앞의 모든 항목과 다른 패턴 뒤의 모든 항목을 제거하는 방법은 무엇입니까?

답변1

sed 's/ \.\..*$//' /path/to/file작동해야 합니다:

 \.\. - A space followed by two literal periods
.*    - One or characters of any type
$     - End of line 

답변2

또 다른 덜 우아한 솔루션은 다음과 같습니다.

cat path/to/yourfile | sed -E "s/[\.]{2,}//g" | sed "s/[0-9]//g" > path/to/new_file

어디:

  • -E정규식을 확장된(현대적인) 정규식으로 해석
  • [\.]{2,}두 번 이상 발생할 때마다 점과 일치합니다.
  • [0-9]모든 숫자와 일치

  • s/expr//gexpr가능한 한 아무것도 일치하지 않는 대안을 나타냅니다 (g)

답변3

이건 어때:

sed 's/\.\+ *[[:digit:]]\+[[:space:]]*$//g'

의미는 다음과 같습니다

한 쌍 + 많은(\+)가리키다(\.)0 대 다수(*)공간( )그리고 일대다(\+) 숫자([[:숫자:]])그리고 혹시라도(*) 공백 ([[:공간:]])AND 줄 끝($)

테스트(두 번째 줄에 "...234"를 삽입하고 그 뒤에 탭/공백을 삽입했습니다):

Something and something ........................... 23<Tab>
An ...234 other one .......................................123<space>
Somethingelse Inc. .................................243<some spaces>

결과:

xb@dnxb:/tmp$ sed 's/\.\+ *[[:digit:]]\+[[:space:]]*$//g' sample.txt
Something and something 
An ...234 other one 
Somethingelse Inc. 
xb@dnxb:/tmp$ 

관련 정보