태그 보관물: man

man

너비가 고정 된 매뉴얼 페이지 인쇄 화면 apropos에 man apropos직접 인쇄되는 것과 약간의

예제 명령으로

man apropos > outputfile

형식화 된 man페이지 를 포함하는 텍스트 파일이 생성 됩니다 (굵은 문자와 같이 화면 aproposman apropos직접 인쇄되는 것과 약간의 차이가 있음 ).

그러나 생성 된 출력 파일의 최대 행 너비를 수동으로 설정하여 모든 단락이 해당 너비에 맞게 조정되도록하고 싶습니다.

man을 통해 페이지가 생성됩니다 groff예를 들어, 내가 넣어 시도 : .ll 50원래의 단락 전에 .gz man소스 텍스트 파일,하지만 몇 가지에 대한 작업을해야하는 경우가 사소한 man페이지. 또한 모든 문자가 인식되는 것은 아닙니다.

apropos.1:45: warning: can't find character with input code 195
apropos.1:45: warning: can't find character with input code 168
apropos.1:47: warning: can't find character with input code 178
apropos.1:131: warning: can't find character with input code 169

더 간단한 방법이 있는지 궁금합니다. ?를 만드는 동안 최대 선 너비를 수정하는 방법은 outputfile무엇입니까? 특정 명령이 있습니까?


편집 :

(다음 모든 고려 사항은 Ubuntu 18.04에 관한 것입니다. 위의 14.04 질문을 포함하여 이전 버전에서는 더 이상 테스트 할 수 없습니다.)

한 줄 임시 솔루션과 관련하여 MANWIDTH아직 사용자 정의 값으로 내 보내지 않은 경우 에는 차이가 없습니다.

$ MANWIDTH=60 man apropos > outputfile

$ COLUMNS=60 man apropos > outputfile

그러나 첫 번째 방법 MANWIDTH은 원칙적으로 더 좋습니다.


편집 2 (질문과 밀접한 관련이 없음) :

대신 모든 맨 인쇄에 적용되는 영구 폭 설정을하고, 그 필요가 내보내 변수의 원하는 값. 와:

$ export MANWIDTH=60
# zero or more additional lines
$ man apropos > outputfile

man apropos터미널 창의 크기 조정에 관계없이 동일한 너비로 인쇄됩니다. 대신에

$ export COLUMNS=60
# zero or more additional lines
$ man apropos > outputfile

export와 사이의 터미널 창이 크기를 조정하지 않은 경우에만 이전과 동일한 결과를 제공합니다 man <page> > outputfile.



답변

MANWIDTH환경 변수를 사용하십시오 .

MANWIDTH=60 man apropos > apropos.txt

man 2.7.4의 맨 페이지는 다음과 같이 말합니다.

$ MANWIDTH가 설정되면 해당 값은 매뉴얼 페이지의 형식을 지정할 행 길이로 사용됩니다. 설정되지 않은 경우 매뉴얼 페이지는 현재 터미널에 적합한 행 길이로 형식화됩니다 ($ COLUMNS 값, 사용 가능한 경우 ioctl (2) 또는 사용 가능한 경우 80 자).

COLUMNS, ioctl값 과 값을 모두 대체 합니다. COLUMNS창 크기가 변경 될 때마다 값이 동적으로 업데이트되므로 수정에 의존 하지 않는 것이 좋습니다 (여기에서는 작동하지만).

사용 MANWIDTH대신에 COLUMNS도하면 같은 줄을 추가하여 변경 사항을 영구적으로 할 수 있습니다 export MANWIDTH=60쉘 시작 파일에.


답변

COLUMNS환경 변수를 설정하십시오 . 1.22.3의 데비안 man에서 mandb2.7.0.2 부터 작동합니다 groff.

$ COLUMNS=60 man apropos | head
APROPOS(1)          Manual pager utils          APROPOS(1)



NAME
       apropos - search the manual page names and descrip
       tions

SYNOPSIS
       apropos [-dalv?V] [-e|-w|-r]  [-s  list]  [-m  sys

$ COLUMNS=70 man apropos | head
APROPOS(1)               Manual pager utils               APROPOS(1)



NAME
       apropos - search the manual page names and descriptions

SYNOPSIS
       apropos  [-dalv?V] [-e|-w|-r] [-s list] [-m system[,...]] [-M
       path] [-L locale] [-C file] keyword ...

Ubuntu 14.04 버전에서는 다음과 같이 작성해야합니다.

COLUMNS=60 < /dev/null man apropos | head

거기 man무시 같다 COLUMNS표준 입력 터미널 (이것은 상기 터미널 폭 단말 장치를 쿼리)이면 환경 변수.

시도해 볼 수도 있습니다 :

s=$(stty -g); stty cols 60; man apropos | head; stty "$s"

zsh당신 과 함께 단축 할 수있는 것 :

STTY='cols 60' man apropos | head

다음 groff과 같이 손으로 호출 하여 수행 할 수 있습니다.

gzip -dcf "$(man -w apropos)" |
  groff -ekpstR -mtty-char -mandoc -Tutf8 -rLL=60n |
  col -bpx

귀하의 입력 코드로 찾을 수없는 문자 는 사용했기 때문에 오류가 있었다 -Tascii대신 -Tutf8하고 사용하지 않은 -k으로 파일을 사전 처리하는 preconv.


답변

fmt내가 아는 한 모든 Linux 배포판에 있는 명령을 사용할 수 있습니다 .

man apropos | fmt -w 70 

70 자로 줄을 바꿉니다.


답변

당신이 사용할 수있는 fold

man cp | fold -w 20

각 20 자 (!) 뒤에 접 힙니다. 유일한 옵션은 “20 문자마다 접기”이므로 단어를 2 개로 자릅니다.

이것을 sed돌보면 다음과 같이 사용할 수 있습니다 (동적 선 길이)

man cp | sed 's/.\{20\} /&\n/g'

20 개의 임의의 문자 다음에 공백 (예 : 새 단어) 뒤에 줄 바꿈을 추가합니다. 따라서 줄은 20자를 초과 할 수 있습니다 (일치 문자는 20 자이므로 공백은 26 자이므로 26 자입니다)

sed명령 에서 마지막 공백을 생략하려면 다음을 수행하십시오.

sed 's/\(.\{20\}\) /\1\n/g'


답변