긴 문자열에 줄바꿈을 삽입하는 명령줄 도구가 있나요?

긴 문자열에 줄바꿈을 삽입하는 명령줄 도구가 있나요?

제한된 텍스트 너비로 표시해야 하는 긴 문자열이 있는 경우, 단일 줄 문자열을 여러 줄 문자열로 변환할 수 있는 명령줄 도구가 *nix에 있습니까? 각 줄은 지정된 텍스트 너비보다 길지 않습니다.

예를 들어, 다음 문자열이 주어지면

$ MYSTRING="Call me Ishmael. Some years ago - never mind how long precisely - having little or no money in my purse, and nothing particular to interest me on shore, I thought I would sail about a little and see the watery part of the world."

다음과 같은 형식을 원합니다.

$ echo $MYSTRING | special-format-command --width=30
Call me Ishmael. Some years ag
o - never mind how long precis
ely - having little or no mone
y in my purse, and nothing par
ticular to interest me on shor
e, I thought I would sail abou
t a little and see the watery 
part of the world.

답변1

다음 fold명령을 시도해 볼 수 있습니다.

echo "$MYSTRING" | fold -w 30

답변2

fmt(GNU coreutils의 일부와 IIRC 다른 버전은 GNU가 아닌 *nixes에 포함되어 있으므로 거의 확실하게 설치됩니다.) 전체 목적은 단락 형식을 다시 지정하는 것입니다.

par그러나 (단락 재구성) 이라는 더 나은 도구가 있습니다 . fmt가능한 모든 작업을 수행 하지만 정확한 출력 형식을 제어할 수 있는 더 많은 옵션이 있습니다.

정말 좋은 점 중 하나 par는 이메일의 인용문(다양한 수준의 인용문 포함)을 매우 지능적으로 처리한다는 점입니다. 매우 유용합니다. F5 키를 누르면 현재 단락이 par를 통해 전송되도록 .vimrc를 설정했습니다.

배포판용으로 패키지되어 있지 않은 경우(데비안 및 파생 제품용이며 아마도 다른 배포판에도 해당) 다음에서 해당 항목을 찾을 수 있습니다.http://www.nicemice.net/par/

답변3

이를 사용하는 한 가지 방법은 다음과 같습니다 sed.

sed 's/.\{30\}/&\
/g'

답변4

fold -s귀하의 질문에 대한 가장 짧고 최선의 답변입니다.

그러나 이러한 단일 목적 도구는 경우에 따라 효과적일 수 있지만 일반적으로 해당 작업은 편집자에게 맡기는 것이 좋습니다.

Emacs에서는 원하는 대로 조정할 수 있습니다. 나는 일반적으로 단락 끝을 제외하고는 줄 바꿈을 원하지 않기 때문에 visual-line-mode(패턴 라인에서 보조 모드로 표시 ) 를 사용합니다 .Wrap

나는 내가 어떻게 했는지 모두에게 말해야겠다고 생각했다. 이것이 "유일한" 방법은 아니지만, 제가 함수와 변수에 대해 언급했듯이 방법입니다.당신의접근 방식은 이들을 결합하고 자동화하여 귀하에게 적합하도록 만드는 것입니다. (이것은 Emacs이지만 충분히 고급 편집자라면 비슷한 게시물을 작성할 수 있습니다.)

나는 타이핑할 때 줄을 시각적으로 감싸고 결코 수동으로 끊지 않는다고 말했습니다. 항상 그렇듯이 예외가 있습니다. 예를 들어 GNUS는 줄이 특정 너비(문자 수)를 초과하는 게시물을 Usenet에 보내지 않습니다. 그래서 M-qEmacs M-q에서 fill-paragraph. 이 변수는 fill-column패딩 너비를 제어합니다. 예를 들어, (한 줄에) 이렇게 쓴다면

This is a lot of text being written right now. The purpose is to overflow the line so I have have to line break it with M-q.

그런 다음 Mq를 사용하면

This is a lot of text being written right now. The purpose is to
overflow the line so I have have to line break it with M-q.

( justify-current-line두 행의 두 배) 당신은 얻습니다

This  is a lot  of text  being written  right now.  The purpose  is to
overflow  the  line  so  I  have  have to  line  break  it  with  M-q.

그러나 나는 사람들이 사물을 보기 위해 고정 폭 글꼴을 거의 사용하지 않는다는 것을 알았습니다. 그래서 그것을 사용하는 데 별 의미가 없습니다(나 자신의 보는 즐거움을 제외하면). 원하는 경우 fill-paragraph패딩을 조정할 수 있습니다.그리고동시에 증명해보세요. 다음을 입력할 때 Emacs가 항상 이 작업을 수행하도록 할 수도 있습니다 auto-fill-mode. (스트레스를 많이 받는 것 같지만 그건 나뿐이다.)

이것은 많은 작업처럼 보일 수 있지만 일단 작업을 수행하고 나면(이 작업과 다른 수천 가지 작업을 수행함) 원하는 방식으로 정확히 작동하는 이러한 도구를 사용하여 작업하는 것을 정말 즐길 수 있습니다.

관련 정보