我想打印仅包含单个字的行。
例如:
this is a line
another line
one
more
line
last one
我想获得只有单字的那些
one
more
line
编辑:伙计们,谢谢你的回答。几乎所有答案都适用于我的测试文件。但是我想列出bash历史中的单行。当我尝试你的答案时
history | your posted commands
下面所有这些都失败了。有些只打印一些数字(可能是行号?)
答案 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)