【发布时间】:2021-06-17 23:24:52
【问题描述】:
我尝试过这样的事情
sed 's/^[ \t]*//' file.txt | grep "^[A-Z].* "
但它只会显示以大写开头的单词开头的行。
file.txt 内容:
某事1某事2
单词1 单词2
这个比较低
输出将是Something1 something2,但我希望它也显示第二行,因为还有一个以大写字母开头的单词。
【问题讨论】:
我尝试过这样的事情
sed 's/^[ \t]*//' file.txt | grep "^[A-Z].* "
但它只会显示以大写开头的单词开头的行。
file.txt 内容:
某事1某事2
单词1 单词2
这个比较低
输出将是Something1 something2,但我希望它也显示第二行,因为还有一个以大写字母开头的单词。
【问题讨论】:
使用 GNU grep grep -P "[A-Z]+\w*" file.txt 可以工作。或者,正如@Shawn 在下面的评论中所说,grep -P '\b[A-Z]' file.txt 也可以使用。如果您只想要单词而不是整行,grep -Po "[A-Z]+\w*" file.txt 会给您单个单词。
【讨论】:
\w*。这导致它可以在任何地方匹配带有大写字母的单词,而不仅仅是在前面。
grep -P '\b[A-Z]' file.txt 更近了。
grep -P '\b[A-Z]' file.txt 将忽略中间带有大写字母的单词。如果这个答案解决了你的问题,请accept the answer
使用 GNU grep,您可以使用
grep '\<[[:upper:]]' file
grep '\b[[:upper:]]' file
注意:
\< - 前导词边界(\b 是词边界)[[:upper:]] - 任何大写字母。#!/bin/bash
s='Something1 something2
word1 Word2
this is lower
папа Петя'
grep '\<[[:upper:]]' <<< "$s"
输出:
Something1 something2
word1 Word2
папа Петя
【讨论】:
你如何显示所有的单词
这很简单:
grep -wo '[A-Z]\w*'
【讨论】: