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

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

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

그래서 다음과 같은 데이터를 얻었습니다.

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

그래서 제가 원하는 것은 공백 뒤의 점(및 숫자) 전체를 삭제하는 것입니다.

지금까지 거기에서 OP의 명령을 사용하려고 시도했지만 처음 만나는 점 이후의 모든 것을 삭제하기 때문에 예상대로 작동하지 않았습니다. 이는 Somethinelse Inc.라는 종류의 데이터에 있는 점도 삭제된다는 의미입니다.

나는 첫 번째 .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'

이는 다음을 의미합니다.

일+대+다(\+)도트(\.)AND 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$ 

관련 정보