텍스트 파일에서 해당 줄을 삭제하면서 입력 텍스트 파일의 첫 줄을 얻는 방법


11

텍스트 파일에서 해당 줄을 삭제하면서 입력 텍스트 파일의 첫 줄을 얻으려면 어떻게해야합니까?

이런 텍스트 파일 /myPathToTheFile.txt이 있다면

► put returns between paragraphs
► for linebreak add 2 spaces at end
► _italic_ or **bold**

이 줄을 출력으로 만들고 싶습니다.

► put returns between paragraphs

내 텍스트 파일은 이제 다음과 같아야합니다

► for linebreak add 2 spaces at end
► _italic_ or **bold*

이 작업의 비용은 파일 크기에 비례합니다. 따라서 파일이 크고이 작업을 자주 수행하면 속도가 매우 느려집니다.
코드 InChaos

답변:


13
ex -s /myPathToTheFile.txt <<\EX
1p
1d
wq
EX

또는

ex -s /myPathToTheFile.txt <<< 1p$'\n'1d$'\n'wq

또는 적은 타이핑 :

ed -s /myPathToTheFile.txt <<< $'1\nd\nwq'

와, 에드의 좋은 사용 ...!
qwr

10

적어도 GNU sed의 경우 :

$ cat file
► put returns between paragraphs
► for linebreak add 2 spaces at end
► _italic_ or **bold**

$ sed -i '1{
w /dev/stdout
d}' file
► put returns between paragraphs

$ cat file
► for linebreak add 2 spaces at end
► _italic_ or **bold**

GNU sed를 사용하면 하나의 라이너로 작성할 수 있습니다

sed -i -e '1 {w /dev/stdout' -e 'd}' file

6

쉘 스크립트를 요청한다고 가정하면 요청한 작업이 수행됩니다.

NAME=$1
head -n 1 $NAME
sed -i '1d' $NAME


2

당신은 사용할 수 있습니다 head, tail그리고 mv:

첫 번째 줄을 표시하십시오.

head -1 myPathToTheFile.txt

마지막 ( +2) 줄 유지 :

tail -n +2 myPathToTheFile.txt > file.tmp && mv file.tmp myPathToTheFile.txt

1

파일 디스크립터와 약간의 사용 python

{
    { 
    head -n1 >&3; 
    3>&- tail -n +1;
    3>&- python -c 'import sys; sys.stdout.truncate(sys.stdout.tell())';
    }<file 1<>file
} 3>&1

1

머리와 꼬리를 사용합니다. 파일은 target.txt입니다

head -1 target.txt && tail -n+2 target.txt > tmp
mv tmp target.txt && rm tmp

참고 : 현재 폴더에 기존 파일 tmp가 없는지 확인하십시오. 그렇지 않으면 제거됩니다.

설명:

  • "head -1"은 첫 번째 줄을 선택합니다
  • "tail -n + 2 target.txt> tmp"는 두 번째 이후 (포함)에서 모든 행을 선택하여 tmp에 넣습니다.
  • mv는 tmp로 원본 파일을 덮어 씁니다.
  • rm tmp는 이렇게 생성 된 tmp 파일을 제거합니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.