在历史记录中打印命令,只包含一个单词

时间:2015-07-21 09:51:11

标签: regex grep history

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

例如:

this is a line
another line
one
more
line
last one

我想获得只有单字的那些

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

history | your posted commands 

下面所有这些都失败了。有些只打印一些数字(可能是行号?)

7 个答案:

答案 0 :(得分:2)

要重新解决您的问题,应删除包含空格或任何内容的任何行。

grep -Ev '^$| ' file

您的问题陈述不明确是否也可能出现仅包含标点符号的行。也许试试

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

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

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

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

匹配行号后跟单个字母数字标记的行。请注意,行号和命令之间将有两个空格。

在上述所有情况下,-E选择扩展正则表达式匹配,即egrep(基本RE又称传统grep不支持例如+运算符,尽管它是可用\+)。

答案 1 :(得分:2)

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

为此,您可以说:

history | awk 'NF==2'

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

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

答案 2 :(得分:1)

试试这个:

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

通过上述输入,它将输出:

one
more
line

答案 3 :(得分:1)

假设您的文件为texts.txt,而grep不是唯一的标准;那么

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

答案 4 :(得分:1)

如果您的测试字符串位于名为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

答案 5 :(得分:1)

如果你的单行文字末尾没有空格,你也可以搜索没有空格的行:

grep -v " "

答案 6 :(得分:1)

我认为您所寻找的内容可以最好地描述为newline,然后是wordspace具有负面预测,

 /\n\w+\b(?! )/g

example