打印仅包含一个单词的历史命令

Print commands in history consisting in just one word

我想打印仅包含单个单词的行。

例如:

this is a line
another line
one
more
line
last one

我要单字的

one
more
line

编辑:伙计们,谢谢你的回答。几乎所有答案都适用于我的测试文件。但是我想在 bash 历史记录中列出单行。当我尝试像

这样的答案时
history | your posted commands 

以下全部失败。有些只打印一些数字(可能是行号?)

试试这个:

grep -E '^\s*\S+\s*$' file

上面的输入,会输出:

one
more
line

假设您的文件为 texts.txt,如果 grep 不是唯一的标准;然后

awk '{ if ( NF == 1 ) print }' texts.txt

如果您的测试字符串在名为 in.txt 的文件中,您可以尝试以下操作:

grep -E "^\w+$" in.txt

意思是:

^ starting the line with
\w any word character [a-zA-Z0-9]
+ there should be at least 1 of those characters or more
$ line end

输出为

one
more
line

如果您的单字行末尾没有 space,您还可以搜索没有空 space 的行:

grep -v " "

要重述您的问题,应删除任何包含 space 或不包含任何内容的行。

grep -Ev '^$| ' file

您的问题陈述没有具体说明仅包含标点符号的行是否也可能出现。也许试试

grep -Ex '[A-Za-z]+' file

只匹配只包含一个或多个字母的行。 (-x 选项隐式锚定模式——它需要整行匹配。)

在Bash中,history的输出用行号修饰;也许试试

history | grep -E '^ *[0-9]+  [A-Za-z]+$'

匹配行号后跟单个字母数字标记的行。注意行号和命令之间会有两个space

在上述所有情况下,-E 选择扩展正则表达式匹配,又名 egrep(基本正则又名传统 grep 不支持例如 + 运算符,虽然它可以作为 \+).

我认为您要查找的内容最好描述为 newline 后跟 word 以及 space

的负前瞻性
 /\n\w+\b(?! )/g

example

您想获取 history 中仅包含一个单词的所有命令。考虑到 history 将命令编号打印为第一列,您需要匹配包含两个单词的那些行。

为此,你可以说:

history | awk 'NF==2'

如果您只想打印命令本身,请说:

history | awk 'NF==2 {print }'