【发布时间】:2015-09-17 21:39:08
【问题描述】:
每当使用 sed 在文件中找到带有首字母大写字母的单词时,我都想打印“Found”。
我尝试过以下方法
s/\b[A-Z]\w*\s*/FOUND/g
/FOUND/d
但它不起作用。它只是用 Found 替换每个单词。
请告诉我哪里错了
【问题讨论】:
-
你能提供一个示例输入和预期输出吗?我不清楚输出应该是什么。
标签: sed
每当使用 sed 在文件中找到带有首字母大写字母的单词时,我都想打印“Found”。
我尝试过以下方法
s/\b[A-Z]\w*\s*/FOUND/g
/FOUND/d
但它不起作用。它只是用 Found 替换每个单词。
请告诉我哪里错了
【问题讨论】:
标签: sed
打印 FOUND 表示行内有一个大写的起始词
sed -e 's/^/ /;/[^[:alnum:]_-][A-Z]/ !d' -e 's/.*/FOUND: &/' YourFile
[^[:alnum:]_-] 类以指定自动作为单词起始边缘的内容(这里不是数字、字母、- 和_,所以; 可用并且找到;Ok
-e 操作)调整为您想要的任何行(这里用FOUND 替换所有行)打印 FOUND 代替每个大写字母单词
sed -e 's/^/ /' -e ':cycle' -e 's/\([^[:alnum:]_-]\)[A-Z][[:alnum:]-_]*/\1FOUND/g;t cycle' -e 's/.//' YourFile
【讨论】:
这可能对你有用(GNU sed):
sed '/\n/!s/\b[[:upper:]]\S*/\nFOUND\n/g;/^FOUND/P;D' file
用\nFOUND\n 替换以大写开头的每个单词(每行仅执行一次,因此不匹配\n)并仅打印以FOUND 开头的字符串,减少行直到它为空。然后在下一行重复等等。
【讨论】:
文件:
Hi there
My Name is Ian
and I am Have no Worries
将文件拆分为单词,将每个以大写开头的单词替换为Found,然后打印出所有Founds,而忽略其余部分:
sed 's/ /\n/g' file | sed 's/^[A-Z].*/Found/;/^Found/ !d'
编辑:感谢 NeronLeVelu 指出 cat 和 grep 是不必要的
【讨论】:
sed 's/ /\n/g' file | sed 's/^[A-Z].*/Found/;/^Found/ !d'