긴 줄에 줄 바꿈을 삽입하는 명령 줄 도구가 있습니까?


18

제한된 텍스트 너비로 표시해야하는 긴 문자열이 주어지면 * 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.

답변:


24

다음 fold명령을 시도해보십시오 .

echo "$MYSTRING" | fold -w 30

2
+1하지만, 아마도 더 나은로 작성 echo $MYSTRING | fold -w 30때문에, -30구문이 표시되지 않습니다 배 맨 ?
ire_and_curses

5
후손을 위해서도 있습니다 fmt. 차이 fold와는 fmtfold, 고정 폭에서도 분할 단어를 감싸 및 공백 라인을 시작할 수있다. fmt너비 근처 또는 아래로 줄 바꿈 하는 동안 단어가 분리되지 않고 줄이 공백으로 시작하지 않고 짧은 줄이 결합 될 수 있습니다.
bahamat

5
fold옵션을 사용할 fmt때 와 비슷한 동작을하는 것으로 보입니다 -s.
Cory Klein이

웃긴, 나는 -w 옵션을 사용했지만 그것을 char로 나눕니다.
amphibient

6

다음을 사용하는 방법이 있습니다 sed.

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

그러나 그것은 무엇을 의미합니까?
Richard

1
@Richard 줄 바꿈 ( .\{30\})을 제외한 모든 문자의 30을 동일한 문자열 ( &)로 바꾸고 줄 바꿈을 바꿉니다 .
Chris Down

6

의 전체 목적 fmt다시 포맷 단락이다 (GNU의로 coreutils 및 IIRC 다른 버전의 일부가 아직 설치되어 거의 확실하다, 비 GNU * nixes도 포함 된).

그러나 par(문단 포맷터를 위해) 라는 더 좋은 도구가 있습니다. 가능한 모든 작업을 수행 fmt할 수 있지만 정확한 출력 형식을 제어 할 수있는 훨씬 더 많은 옵션이 있습니다.

정말 좋은 점 중 하나는 par전자 메일에서 인용을 처리하는 것이 매우 똑똑하다는 것입니다 (여러 수준의 인용조차도). 매우 유용합니다 ... F5를 치면 파를 통해 현재 단락을 보내도록 내 .vimrc를 설정했습니다.

배포판 용으로 패키지화되지 않은 경우 (데비안 및 파생 제품 용으로도 가능) http://www.nicemice.net/par/ 에서 par를 찾을 수 있습니다 .


"GNU가 아닌 * nixes"는 "Unix와 같은"Unix가 아닌 "real"을 의미합니까? (그렇지 않으면 멋진 도구 인 것 같습니다.)
Emanuel Berg

나는 이제 쓸모없는 독점 정크 * nixes를 의미합니다.
cas

그게 내가 생각한 것인데 왜 별표를 사용합니까? 나는 그것이 "Unix-like"를 항상 입력해야한다고 생각했습니다 (Linux 등). (세부 사항에 대해 당신을 괴롭히지 않고 있습니다. 그러나 저는 정말로 알고 싶습니다. 나는 그것을 위해 당신을 괴롭히지 않습니다.)
Emanuel Berg

*nix"일반적인 유닉스 나 유닉스 계열 시스템"이라고 말하는 방법 일뿐입니다. 유닉스라는 단어가 AT & T의 독점 상표였던 당시부터 시작되었습니다
cas

3

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

그러나 일부 경우에는 이러한 다목적 도구만큼이나 일반적으로 편집자에게이 작업을 수행해야합니다.

Emacs에서는 원하는대로 조정할 수 있습니다. 나를 위해, 나는 사용 visual-line-mode(A와 쇼를 Wrap일반적인 경우에, 나는 문단의 끝보다 다른 곳에서는 줄 바꿈을하지 않기 때문에 모드 라인에 작은 모드).

나는 내가하는 방법을 말할 것이라고 생각했다. "the"방식은 아니지만 한 가지 방법입니다. 함수와 변수에 대해 언급했듯이, 당신의 방법은 그것들을 모으고 자동화하여 그것들을 당신에게 적합하게 만드는 것입니다. (이것은 Emacs이지만, 충분히 고급 편집기라면 비슷한 게시물을 작성할 수 있습니다.)

나는 입력 할 때 시각적으로 줄이 감겨 있고 수동으로 끊지 않는다고 말했습니다. 항상 그렇듯이 예외가 있습니다. 예를 들어, GNUS는 특정 너비 (문자)를 초과하는 줄이있는 게시물을 Usenet에 보내지 않습니다. 그런 다음을 사용 M-q합니다. Emacs 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(2 회이 같은 라인), 당신은 얻을

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. (저는 스트레스가 많지만 저입니다.)

이것은 많은 일처럼 보일 수 있습니다. 그러나 일단 당신이 (이것과 다른 1000 가지로) 끝내면 원하는대로 정확하게 동작하는 도구로 작업하는 것을 즐길 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.