awk - 如何在 bash 中使用 sed/awk 将字符串从模式剪切到模式
问题描述
我不知道如何使用 sed 或 awk 来修剪文件中的字符串。我已经搜索了好几个小时没有想要的结果。我有一个这样的字符串:
c=one, o=roll, root ca valid until: date
c=one, o=roll, root ca Located: location
c=two roll, root ca valid until: date
c=two roll, root ca Located: location
我想要的输出在列中对齐:
c=one valid until: date
c=one Located: location
c=two roll valid until: date
c=two roll Located: location
我正在使用 sed 命令,它不像(以及许多其他)那样工作:
sed 's/,.*\^([valid])//g' file.txt
但我无法弄清楚第二个条件,直到“有效”这个词,以及同一命令中的“有效”和“位置”。非常感谢!
解决方案
$ sed -E 's/,.*(valid|Located)/ \1/' ip.txt
c=one valid until: date
c=one Located: location
您可以将 terms valid
, Located
(以及您想要的任何其他此类术语)放在一个捕获组中。然后\1
在替换部分使用反向引用将其放回原处。
要对齐输出,您可以使用|
输入中未出现的某些字符,然后使用column
命令
$ sed -E 's/,.*(valid|Located)/|\1/' ip.txt | column -t -s'|'
c=one valid until: date
c=one Located: location
c=two roll valid until: date
c=two roll Located: location
推荐阅读
- python - 有效地将数据从 CSV 读取到具有多个分隔符的数据框中
- jenkins - 如何正确配置 Jenkins 以显示 Jmeter 测试?
- php - 测试用户是否登录 laravel 5.7
- c++ - 尝试创建结构对象,在位置 0x3FE00000 中创建访问冲突写入错误
- json - CURL 不断抛出“无效的正文格式”
- node.js - 错误:请手动安装繁琐的软件包
- python - 遍历 DataFrame 的列并赋值
- c# - 是否可以在 EXE 应用程序中打包资源文件?
- c# - 如何在 Blazor 服务器端重定向到不同的路由
- jhipster - UAA 服务器一直连接到 localhost 以进行注册表