새 파일에 모든 줄의 n번째 단어를 쓰는 방법은 무엇입니까? 예를 들어, new_file.txt의 모든 줄 중 두 번째 단어를 쓰고 싶습니다.
이전 파일.txt:
pippo pluto paperino
gigi lui marco
piero andrea chiara
새 파일.txt:
pluto
lui
andrea
답변1
첫 번째 단계는 각 줄의 두 번째 단어를 제외한 모든 단어를 삭제하는 것입니다. 이것은 매우 간단한 :%norm
명령입니다.
:%norm dwwhD
dwwhD
각 줄을 수동으로 입력하는 것과 비슷하지만 더 빠릅니다. 두 번째 단계, 새 파일에 저장:
:w new_file.txt
old_file.txt
그런 다음 아무것도 변경되지 않도록 저장하지 않고 종료합니다 .
:q!
답변2
:!cut % '-d ' -f2 > new_file.txt
기본 구분 기호는 cut
탭이므로 구분 기호를 공백으로 설정하려면 "-d"를 사용해야 합니다.
%
Vi 내부에서는 현재 파일 이름을 대체 하여 사용할 수 있습니다 .
답변3
간단한 bash 스크립트를 사용하여 터미널 명령줄에서 이 작업을 수행할 수 있습니다. 첫 번째파일 내용 반복. 그런 다음 각 라인에 대해 에코를 awk로 파이프하고awk가 두 번째 열을 추출하도록 하세요.. 마지막으로 텍스트를 새 파일로 리디렉션합니다.
이 모든 것을 종합하면 다음과 같습니다.
while read line; do
echo $line | awk '{print $2}' >> new_file.txt
done <old_file.txt
답변4
:s
정규식과 함께 명령을 사용하십시오 .
:%s/\v^\s*\S+(\s+(\S+).*)?/\2
이것\v
Vim에게 grep이나 pcre의 확장 정규식과 유사한 "매우 마법 같은" 정규식 스타일을 사용하라고 지시합니다.
정규식은 시작 부분에 있는 단일 단어와 일치하며 앞에는 일부 선택적인 공백이 있을 수 있습니다. 그런 다음 공백 뒤에 두 번째 단어가 그룹 내부에 캡처됩니다 \2
. 마지막으로 a는 .*
줄의 나머지 부분 전체와 일치합니다.
첫 번째 단어 뒤의 부분은 선택 사항입니다(대괄호로 그룹화되고 마지막 와 함께 선택 사항임 ?
). 이렇게 하면 단일 단어가 있는 줄이 여전히 일치하며, 이 경우 빈 줄로 대체됩니다. 이는 두 번째 단어가 해당 줄의 경우에 작동하므로 단일 단어가 있는 줄에 대해 예상되는 것입니다. 이는 이 작업에 정규식을 사용하는 이점 중 하나입니다. 엣지 케이스가 있는 줄을 처리하는 방법을 더 잘 제어할 수 있기 때문입니다.
마지막으로 \2
그룹으로 대체하십시오. 줄의 두 번째 단어만 캡처합니다.
그런 다음 수정 사항을 새 파일 이름으로 저장할 수 있습니다.
:saveas new_file.txt
이렇게 하면 수정되지 않은 상태가 유지되고 old_file.txt
현재 버퍼에 대한 추가 수정 사항은 new_file.txt
.