내 시스템에 뭔가가 변경되었는지는 확실하지 않지만 grep
내 명령을 통해 Unix 매뉴얼 페이지를 필터링하는 것이 작동하지 않는다는 것을 발견했습니다. 무엇이 문제인지 아시나요?
예를 들어jq 매뉴얼 페이지다음 코드에서 컴파일되었습니다.
.
.IP "\(bu" 4
\fB\-\-slurp\fR/\fB\-s\fR:
.
.IP
Instead of running the filter for each JSON object in the input, read the entire input stream into a large array and run the filter just once\.
.
스위치를 빨리 찾으려면 --slurp
일반적으로 다음 터미널 세션에 표시된 대로 jq
매뉴얼 페이지를 필터링합니다.grep
$ man jq | grep -- --slurp
$
아무것도 반환되지 않는 방법에 주목하세요. 이상합니다. 예상되는 결과는 아래와 같습니다.
$ man jq | grep -- --slurp
• --slurp/-s:
이는 실제로 man jq
명령을 실행하고 /
검색 키 입력을 사용한 다음 검색을 사용하면 --slurp
작동하기 때문에 예상되는 현상입니다.
# ...
• --slurp/-s:
Instead of running the filter for each JSON object in the input, read the entire input stream into a large array and run the filter just once.
특수문자에 문제가 있는 것 같은데 잘 모르겠습니다. 명령을 통해 매뉴얼 페이지를 넣으려고 했지만 cat
그것도 작동하지 않았습니다. 또한 모든 특수 문자를 제거해 보았습니다.Linux 텍스트에서 모든 특수 문자를 제거하는 방법--하지만 그것도 안 돼요.
$ man jq | cat | grep -- --slurp
$
$ man jq | sed $'s/[^[:print:]\t]//g' | grep -- --slurp
$
관련이 있는 경우 내 시스템에 대한 세부정보는 다음과 같습니다.
$ neofetch --off
OS: macOS 13.0.1 22A400 x86_64
Host: MacBookPro16,1
Kernel: 22.1.0
Uptime: 6 days, 1 hour, 3 mins
Packages: 145 (brew)
Shell: bash 3.2.57
Resolution: 1792x1120@2x
DE: Aqua
WM: Quartz Compositor
WM Theme: Blue (Light)
Terminal: iTerm2
Terminal Font: Monaco 12
CPU: Intel i7-9750H (12) @ 2.60GHz
GPU: Intel UHD Graphics 630, AMD Radeon Pro 5300M
Memory: 10425MiB / 16384MiB
답변1
내 Mac 노트북에서 당신과 같은 것을 보았습니다. 저는 설정 이나 환경 변수 man -P cat
대신 호출기를 cat으로 설정하곤 했습니다. 매뉴얼 페이지를 탐색했을 때 마지막에 다음을 발견했습니다.PAGER
MANPAGER
man
To get a plain text version of a man page, without backspaces and underscores, try
# man foo | col -b > foo.mantxt
그래서 나는 그것을 시도했고 인수 줄을 포함하여 man jq | col -b | grep slurp
그 안에 줄을 얻었습니다 .slurp
--slurp
내 생각에 가장 좋은 단서는 '라는 문구에 대한 매뉴얼 페이지입니다.백스페이스 키나 밑줄 없음'. 물론, 각 문자 사이에 두 문자를 허용하면 slurp
예상한 줄이 표시됩니다.
man -P cat jq | grep s..l..u..r..p
od -a
검사 라인 중 하나를 사용하면 --slurp
다음과 같은 결과를 얻을 수 있습니다.
0000420 sp U s e sp - bs - - bs - s bs s l bs
0000440 l u bs u r bs r p bs p f bs f i bs i
0000460 l bs l e bs e sp i n s t e a d . nl
Use --slurpfile instead.
이것은 렌더러가 분명히 백스페이스 키를 사용하고 문자열의 굵은 인쇄를 나타내기 위해 문자를 다시 인쇄한다는 것을 보여주는 줄의 일부입니다 --slurpfile
. 백스페이스 키와 추가 문자는 간단한 grep 명령을 무효화합니다. (저도요)
따라서 col -b
이전에 매뉴얼 페이지를 파이핑하면 grep
원하는 방식으로 출력을 검색할 수 있는 것처럼 보입니다.