Mac의 sed로 개행 코드를 출력시킨다 ~ 개행 코드의 차이 재확인 ~

3772 단어 Macsed
Octpress에서 각 블로그 기사에 이용하고 있던 <!--more--> 를 일괄 치환할 때에, 빠진 이야기.

다음과 같이, <!--more--> 를 치환하려고 한 것이,
  • ! 이스케이프
  • 개행 코드의 출력

  • 에서 빠졌다.

    교체 전


    <!--more-->
    

    대체 후


    <!--more-->
    {% include hogehoge.html %}
    

    ! 이스케이프



    우선, ! 는 과거의 실행 커멘드를 참조하는 커멘드이기 때문에, 치환 캐릭터 라인에 포함되면(자) 의도하지 않은 움직임을 해 버린다.

    \! 와 이스케이프 하는 것으로 해결

    개행 코드 출력



    Mac의 sed 명령에서는, 예를 들면,
    echo "hogehoge\nfoo\nbar" | sed 's/\\n/\n/g'
    

    올바르게 치환시키기 위해서는 다음과 같이 할 필요가 있다.
    LF=$'\\\x0A'
    echo "hogehoge\nfoo\nbar" | sed 's/\\n/'"$LF"'/g'
    

    CR LF CR+LF의 차이



    개행 코드의 복습도 겸해 조사해 둔다

    캐리지 리턴(Carriage Return 복귀 : CR(0x0d))


  • 줄 머리로 프린트 헤드 또는 커서를 이동합니다.

  • OS9까지의 MacOS는 CR을 개행 코드로 해석하고 있었다.

    라인 피드(Line Feed 개행 LF(0x0a))


  • 다음 행으로 한 줄 이동합니다.

  • UNIX 환경은 LF를 개행 코드로 해석합니다.
    (OSX도 마찬가지)

    CRLF 0x0d0a



    Windows 환경은 CR LF를 개행 코드로 해석합니다.

    실행하고 싶은 명령



    markdown 파일에서 \n 태그 바꾸기
    find . -name "*.markdown" | xargs sed -i '' 's/<\!--more-->/<\!--more-->'"$LF"'{% include ga.html %}/g'
    

    참고



    sed로 줄 바꿈 출력 - rcmdnk’s blog

    그림 DTP 용어 사전개행 코드의 차이 일본어 조판에서 말하는 개행은, 행을 재차해 다음의 행의 시작부터 문자를 짜 시작하는 것이다. 그러나 유럽문 조판에서는, 타자기의 조작 메카니즘의 제약으로부터 일본어의 개행에 해당하는 조작은 2단계로 나뉘어, ...

    메모



    find _posts/-name "*.markdown"| xargs grep "ga.html"
    _posts//2014-09-28-baseball-club-yokyo.markdown:{% include ga.html %}
    _posts//2014-10-30-how-google-works.markdown:{% include ga.html%}
    _posts//2014-11-16-fountain-pen-cleaning.markdown:{% include ga.html %}
    _posts//2014-11-21-ted-api.markdown:{% include ga.html %}

    좋은 웹페이지 즐겨찾기