예제 명령으로
man apropos > outputfile
형식화 된 man
페이지 를 포함하는 텍스트 파일이 생성 됩니다 (굵은 문자와 같이 화면 apropos
에 man 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
에서 mandb
2.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'