我对linux很新,需要从this text.
中提取“你的”这个词之后出现的所有单词我尝试使用以下命令执行此操作:
awk '{for(i=0;i<=NF;i++) if ($i=="thy") print $(i+1)}' pg1120.txt
但结果输出似乎是错误的。例如,'thy'后出现3次'master'一词,但我的代码只检测到两次出现。我该如何解决这个问题?
答案 0 :(得分:0)
一种方法是用\n
替换所有空格并使用grep
:
$ cat pg1120.txt | tr -s \ '\n' | grep -i -x -A 1 thy
thy
leather
--
thy
rule?
...
这会提取匹配,其中thy
是记录的最后一个单词。 thy
可以是正则表现更好,因为它现在也匹配部分匹配(worthy
等) - 或-x
grep
切换p
,由Mr.先生提供@RobertSeaman,谢谢先生。
使用awk从前一条记录中获取你的信息。将之前的字词存储到$ cat > test
thy master
thy. Master
thy
master
并将其与当前字词进行比较。第一个测试材料:
$ awk '{for(i=1;i<=NF;i++){if(p=="thy")print $i;p=tolower($i)}}' test
master
master
代码:
p
由于thy. != thy
:添加,因此也应从gsub(/[^[:alpha:]]$/,"",p)
移除标点符号
master
Master
master
到程序结束时:
import asyncio
import datetime as dt
from aiohttp import web
async def search(request):
print('!START! %s' % dt.datetime.now())
await asyncio.sleep(5)
print('!--END! %s' % dt.datetime.now())
return web.json_response(data={})
app = web.Application()
app.router.add_get('/search/', search)
web.run_app(app)
#run_server
#python -m aiohttp.web -H localhost -P 8080 handler:init_func
答案 1 :(得分:0)
您可以将grep
与lookbehind一起使用:
grep -Poi '(?<=\bthy )\w+' yourFile.txt
-P
启用perl正则表达式,允许使用lookbehinds。-o
仅打印匹配的单词,而不是完整的行。-i
忽略大小写区别,以便识别thy
和Thy
。(?<=\bthy )
是一个值得关注并确保\bthy
在比赛前发生,而不包括\bthy
。\b
匹配字边界并阻止somewordthy
匹配 - 我们只需要thy
这个字。\w+
匹配任何字词(在thy
之后)。将打印匹配的单词。对于文件内容
Thy first match. thy. No match. Athy no match. thy thy thy.
命令打印
first thy thy
,因为
Sentence ends after thy. ==> mo match ↓ Thy first match. thy. No match. Athy no match. thy thy thy. ^^^^^ ↑ ^^^ ^^^ "Athy" instead of "thy". ==> mo match
匹配用^^^^^
加下划线。
答案 2 :(得分:0)
您只会看到master
的2个匹配项,因为您正在搜索小写thy
您可能想要使用tolower($i)
,即:
awk '{for(i=0;i<=NF;i++) if (tolower($i)=="thy") print $(i+1)}' pg1120.txt
答案 3 :(得分:0)
在循环中使用 awk
可能不是最快的方法。
这可能是最短的。
grep -oP 'thy \K[^ ]+' file