파일의 줄을 명령 줄에서 맨 위로 어떻게 이동합니까?


0

파일의 경로를 파일의 맨 위로 이동하고 싶습니다. 각 경로는 한 줄에 1 개씩 나열됩니다. /someplace/2nd/명령 줄 만 사용하여 맨 위로 이동 하려면 어떻게합니까 ?

/someplace/1st/
/someplace/2nd/
/someplace/3rd/

그래서 나는 결국

/someplace/2st/
/someplace/1nd/
/someplace/3rd/

명령 행에서 파일을 제자리에 편집 (내용 변경)하는 것보다 입력 파일이 지정된 새 파일을 생성하는 것이 항상 쉽습니다. 당신에게 충분합니까? 새 파일을 생성 한 후에는 항상 원래 파일 이름으로 다시 이동할 수 있습니다 (따라서 원본 파일을 스쿼시).
Celada

답변:


3

vim태그 를 사용 했으므로 먼저 Vim의 명령 줄을 의미한다고 가정하겠습니다. 이 경우이 명령이 수행합니다.

:g/^\/someplace\/2nd\/$/m0

마지막 문자는 0입니다. 만나다

:help :g
:help :m

쉘 명령 행을 의미 한 vim경우이 명령을 사용하여 파일을 편집 할 수 있습니다 .

vim -c 'g/^\/someplace\/2nd\/$m0' -cwq yourfile

만나다

:help -c
:help :wq

:/^\/someplace\/2nd\/$/m0을 사용하지 않으면 :g패턴이 짧을 수 있습니다.
romainl

커맨드 라인 버전을 찾고있었습니다. 나는 romainl이 제안한 패턴을 사용했다. 잘 작동합니다. vim 명령을 사용하도록 스크립트를 업데이트하려고합니다. 둘 다 감사합니다.
Jason

4

비 대화식으로 파일을 편집하는 일반적인 방법은 다음을 사용하는 것입니다 ed.

(echo '/^\/someplace\/2nd\/$/m0'; echo w; echo q ) | ed $file

ed파일에서 실행 되는 텍스트 편집기 로 3 개의 명령을 보냅니다 $file.

  • /regular_expression/m0: 줄 일치를 검색 regular_expression하여 위치 0으로 이동
  • w: 파일 쓰기
  • q: 종료

2
{
  sed -n '/^\/someplace\/2nd\//{p;q}' file
  sed    '/^\/someplace\/2nd\//d' file
} > temp && mv temp file

1

이것은 당신을 위해 일할 수 있습니다 (GNU sed) :

sed -i '1,\|/someplace/2nd/|{1{h;d};//!{H;d};G}' file
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.