打印仅包含一个单词的历史命令
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
您想获取 history
中仅包含一个单词的所有命令。考虑到 history
将命令编号打印为第一列,您需要匹配包含两个单词的那些行。
为此,你可以说:
history | awk 'NF==2'
如果您只想打印命令本身,请说:
history | awk 'NF==2 {print }'
我想打印仅包含单个单词的行。
例如:
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
您想获取 history
中仅包含一个单词的所有命令。考虑到 history
将命令编号打印为第一列,您需要匹配包含两个单词的那些行。
为此,你可以说:
history | awk 'NF==2'
如果您只想打印命令本身,请说:
history | awk 'NF==2 {print }'