grep如何使用行首和行尾
How does grep uses beginning and ending of lines
我想阅读 gcc
的手册页中的一个选项。所以我做了 man gcc | grep -- '^-c'
。错误是 troff - cant break line
,因为我的屏幕一半是终端。但是我通过 MANWIDTH=1000 man gcc | grep -- '^-c'
的声明修复了这个问题(感谢:。但不幸的是它不会找到那个选项。没有 begginig 模式(那只是 -c
:完整:MANWIDTH=1000 man gcc | grep -- '-c'
,它会找到所有出现的-c
,这被淘汰了很多,但特别是我正在寻找的选项会被无用的搜索搞得一团糟。所以为什么grep
不使用^
和 $
作为线的开始和结束?或者它与我的终端大小有关 window (即按宽度缩短)= 线的锚点? 然后如何在不全屏显示终端的情况下使用 grep 通过行首进行搜索?
PS:
我不知道为什么,当我声明 MANWIDTH var 时,它不会立即应用于 man 命令,尽管它很有价值。也就是说,如果我先声明它,然后尝试 man 一些东西(最终通过管道将其传递给 grep 以进行行搜索),错误再次出现:troff: warning: can't break line
像这样:
MANWIDTH=1000;
echo $MANWIDTH #output 1000
man gcc | grep -- '^-c'
troff: <standard input>:10635: warning [p 97, 19.0i]: can't break line
-c
不在行首,因为它不在左边距。您可以使用模式 ^\s*-c
,它允许在行首和 -c
之间有零个或多个空白字符。
但是如果你想阅读 -c
命令的文档,你最好使用 info
命令,至少在这种情况下:
info gcc --index-search=c
注意:要使其正常工作,您需要安装 gcc 信息页。例如,在 Debian/Ubuntu 系统上,您需要 sudo apt-install gcc-doc
.
注意:gcc 信息文件作者选择不在大多数选项的索引条目中放置前导连字符。但是大多数信息文件都遵循使用破折号和破折号进行索引的约定(就像 gcc 使用一些 -f
选项一样)。尽管 info
会尝试找到最相关的索引匹配,但 info
索引搜索是文字字符串的子字符串匹配(即没有正则表达式运算符),有时您更喜欢使用破折号进行搜索:
info grep --index-search=-E
或使用 -all
选项提供所有匹配索引条目的列表:
info grep --all --index-search=E
对于选项比 gcc 少的实用程序,您可以直接转到带有 -O
选项的选项列表。
info grep -O
最后,回答你的PS:
如果您希望 MANWIDTH
成为对所有子进程可见的环境变量,请使用 export MANWIDTH=1000
。
我想阅读 gcc
的手册页中的一个选项。所以我做了 man gcc | grep -- '^-c'
。错误是 troff - cant break line
,因为我的屏幕一半是终端。但是我通过 MANWIDTH=1000 man gcc | grep -- '^-c'
的声明修复了这个问题(感谢:-c
:完整:MANWIDTH=1000 man gcc | grep -- '-c'
,它会找到所有出现的-c
,这被淘汰了很多,但特别是我正在寻找的选项会被无用的搜索搞得一团糟。所以为什么grep
不使用^
和 $
作为线的开始和结束?或者它与我的终端大小有关 window (即按宽度缩短)= 线的锚点? 然后如何在不全屏显示终端的情况下使用 grep 通过行首进行搜索?
PS:
我不知道为什么,当我声明 MANWIDTH var 时,它不会立即应用于 man 命令,尽管它很有价值。也就是说,如果我先声明它,然后尝试 man 一些东西(最终通过管道将其传递给 grep 以进行行搜索),错误再次出现:troff: warning: can't break line
像这样:
MANWIDTH=1000;
echo $MANWIDTH #output 1000
man gcc | grep -- '^-c'
troff: <standard input>:10635: warning [p 97, 19.0i]: can't break line
-c
不在行首,因为它不在左边距。您可以使用模式 ^\s*-c
,它允许在行首和 -c
之间有零个或多个空白字符。
但是如果你想阅读 -c
命令的文档,你最好使用 info
命令,至少在这种情况下:
info gcc --index-search=c
注意:要使其正常工作,您需要安装 gcc 信息页。例如,在 Debian/Ubuntu 系统上,您需要 sudo apt-install gcc-doc
.
注意:gcc 信息文件作者选择不在大多数选项的索引条目中放置前导连字符。但是大多数信息文件都遵循使用破折号和破折号进行索引的约定(就像 gcc 使用一些 -f
选项一样)。尽管 info
会尝试找到最相关的索引匹配,但 info
索引搜索是文字字符串的子字符串匹配(即没有正则表达式运算符),有时您更喜欢使用破折号进行搜索:
info grep --index-search=-E
或使用 -all
选项提供所有匹配索引条目的列表:
info grep --all --index-search=E
对于选项比 gcc 少的实用程序,您可以直接转到带有 -O
选项的选项列表。
info grep -O
最后,回答你的PS:
如果您希望 MANWIDTH
成为对所有子进程可见的环境变量,请使用 export MANWIDTH=1000
。