파일에서 모든 줄의 5 번째 단어를 어떻게 삭제합니까? or copy to other location Kindly cooperate

파일에서 각 줄의 5 번째 단어를 삭제하고 싶습니다.

파일의 현재 내용 :

File is not updated or and will be removed
System will shut down f within 10 seconds
Please save your work 55 or copy to other location
Kindly cooperate with us D  

예상 출력 :

File is not updated and will be removed
System will shut down within 10 seconds
Please save your work or copy to other location
Kindly cooperate with us



답변

방법에 대해 cut:

$ cut -d' ' -f1-4,6- file.txt
File is not updated and will be removed
System will shut down within 10 seconds
Please save your work or copy to other location
Kindly cooperate with us
  • -d' ' 구분자를 공백으로 설정

  • -f1-4,6- 첫 번째에서 네 번째 필드 (워드)를 선택하고 다섯 번째 필드를 그대로 둔 다음 6에서 나머지까지 인쇄를 계속합니다.


답변

솔루션 cut:

cut -d ' ' -f1-4 -f6- FILE


답변

awk : 5 번째 필드 제거

awk '{for (i=5; i<NF; i++) $i = $(i+1); NF--};1' file

파일을 제자리에 저장하려면 /programming//q/16529716/7552

5 번째 필드의 내용을 지울 수는 있지만 두 개의 연속 출력 필드 구분 기호가 남습니다.

awk '{$5 = ""};1' file


답변

POSIX sed로 :

sed -e 's/[^[:alnum:]_][[:alnum:]_][[:alnum:]_]*//4' <file


답변

glenn 은 다음과 같은 솔루션을 제공했습니다.

awk '{$ 5 = ""; print} ' 파일

그와 다른 사람들이 지적했듯이, 이것은

  1. 모든 줄에서 앞뒤 공백을 제거합니다.
  2. 공백 (각 공백 및 / 또는 탭)의 각 문자열을 단일 공백으로 압축합니다.
  3. 네 번째 단어와 여섯 단어 사이에 두 개의 공백이 남습니다.

세 번째 문제를 해결하기위한 해킹은

awk '{$ 5 = ""; print} ' 파일 | sed 's ///'

이렇게해도 5 개 이하의 단어가 들어가는 줄 끝에 하나 이상의 공백이 남게됩니다. 입력에 절대 나타나지 않는 단어를 식별 할 수 있으면,

awk '{$ 5 = "unicorn"; print} ' 파일 | sed 's / * unicorn //'

그것조차도 처리 할 것입니다 (그러나 여전히 문제 1과 2를 남깁니다).


답변

 sed 's/^\(\([[:blank:]]*[^[:blank:]]\{1,\}\)\{4\}\)[[:blank:]]*[^[:blank:]]*/\1/' YourFile > Output.txt
  • 공백 / 탭 구분자 (메타 클래스 [: blank :]])를 기반으로하는 POSIX sed
  • 다섯 번째 단어 뒤에 다음 공간을 유지하지만 이전 단어는 제거하십시오.

더 강력 함 (sed는 가능한 한 가장 긴 패턴을 취하고 패턴 *은 첫 번째 버전에서 분리 또는 단어를 놓칠 수 있음)

sed 's/^\([[:blank:]]*\([^[:blank:]]\{1,\}[[:blank:]]\{1,\}\)\{4\}\[^[:blank:]]\{1,\}/\1/' YourFile > Output.txt


답변

펄.

perl -ne 'print $_ =~ /^(\w+ +\w+ +\w+ +\w+ +)\w+ (.*)/,"\n"' file