bash - 在第二次出现另一个字符串后保留该字符串
问题描述
我有一个文件,其中包含如下所示的行:
username1
username2
./2011-05-25-0.json.gz:{"repo":{"url":"https://api.github.dev/repos//","name":"/"},"type":"FollowEvent","public":true,"created_at":"2011-05-25","payload":{"target":{"gravatar_id":"5e17","id":144929,"repos":12,"followers":1,"login":"username3"}},"actor":{"gravatar_id":"dec","id":21,"url":"https://api.github.dev/users/user","avatar_url":"https://secure.gravatar.com/avatar/decc?d=http://github.dev%2Fimages%2Fgravatars%2Fgravatar-user-420.png","login":"username4"},"id":"14"}
./2011-05-25-0.json.gz:{"repo":{"url":"https://api.github.dev/repos//","name":"/"},"type":"FollowEvent","public":true,"created_at":"2011-05-25","payload":{"target":{"gravatar_id":"f9ed","id":82,"repos":5,"followers":4,"login":"username5"}},"actor":{"gravatar_id":"decc93","id":21,"url":"https://api.github.dev/users/username","avatar_url":"https://secure.gravatar.com/avatar/de?d=http://github.dev.user-420.png","login":"username6"},"id":"147"}
我想获得一个文件,其中包含:
username1
username2
username4
username6
也就是说,如果字符串"login":
出现在一行上,则"
在第二次出现之后立即获取其中包含的字符串"login"
。否则,保持线路不变。
我怎样才能做到这一点grep
,或sed
?
解决方案
你可以试试:
sed 's/.*{.*login":"\([^"]*\)".*/\1/g' text.txt
或者
sed -i.bkup 's/.*{.*login":"\([^"]*\)"}.*/\1/g' text.txt
用新用户名覆盖文件并将旧用户名 bkup 到 text.txt.bkup
注意:这假设用户名不包含正则表达式描述的模式。
推荐阅读
- typescript - 如何键入字典传递样式?
- android - 返回上一个片段后应用标题不会改变
- c# - 如何使用 sendkeys.send 使用 windows 键
- scala - 从其他插件调用 Scala Intellij 刷新操作
- spring-boot - 带有 kotlin 设置问题的 Spring Boot gradle 项目
- c# - 无法在 WPF 框架中隐藏导航控件
- discord.py - 在@client.event (discord.py) 之外调用函数
- php - 如何在 MacOs Catalina 中启用 imap 功能
- spring - Spring Boot Micrometer Prometheus 指标显示在应用程序日志中找不到的异常
- javascript - 防止特定属性在 React js 中的 DOM 节点上呈现