bash - 获取文本文件“bash”中特定字符之间的字符串块
问题描述
有人可以帮我找到一个代码来复制字符串'X 0'(X = H,He ...)和最近的'****'之间的所有字符串吗?我使用 bash 进行编程。
H 0
S 3 1.00 0.000000000000
0.1873113696D+02 0.3349460434D 01
0.2825394365D+01 0.2347269535D+00
0.6401216923D+00 0.8137573261D+00
S 1 1.00 0.000000000000
0.1612777588D+00 0.1000000000D+01
****
He 0
S 3 1.00 0.000000000000
0.3842163400D+02 0.4013973935D 01
0.5778030000D+01 0.2612460970D+00
0.1241774000D+01 0.7931846246D+00
S 1 1.00 0.000000000000
0.2979640000D+00 0.1000000000D+01
****
我想对所有“X 0”(X = H,He ...)执行此操作,特别是,为所有“X 0”获得这样的孤立文本:
H 0
S 3 1.00 0.000000000000
0.1873113696D+02 0.3349460434D 01
0.2825394365D+01 0.2347269535D+00
0.6401216923D+00 0.8137573261D+00
S 1 1.00 0.000000000000
0.1612777588D+00 0.1000000000D+01
****
和
He 0
S 3 1.00 0.000000000000
0.3842163400D+02 0.4013973935D 01
0.5778030000D+01 0.2612460970D+00
0.1241774000D+01 0.7931846246D+00
S 1 1.00 0.000000000000
0.2979640000D+00 0.1000000000D+01
****
所以我想我必须找到一种方法来使用包含“X 0”的字符串。我试图使用grep -A2000 'H 0' filename.txt | grep -B2000 -m8 '****' filename.txt >> filenameH.txt
,但它对 X 的其他示例没有那么有用,只是第一个。
解决方案
使用awk
:
awk '/^[^ ]+ 0$/{p=1;++c}/^\*\*\*\*$/{print >>FILENAME c;p=0}p{print >> FILENAME c}' file
该脚本创建与匹配模式的块一样多的文件,/^[^ ]+ 0$/
并且/^\*\*\*\*$/
. 文件索引从 1 开始。
推荐阅读
- c# - Unity C# 使用带有预设的 AssetImporter 以编程方式修改资产导入设置
- c# - 如何以编程方式更新 Azure B2C OpenId Connect 的客户端密码?
- javascript - Javascript类,继承
- google-cloud-platform - 我可以将任何内容上传到 GCP 存储吗?
- python - 循环请求并从 Excel 中提取数据
- python - 如何混淆要编译为可执行文件的python代码?
- javascript - nodeJS 代码在 API 模式下无法正常运行
- vba - 如何在 word 中管理活动文档引用以保存和关闭我新创建的输出?
- react-native - 用于管理工作流的 Expo-payments-stripe 的 ETA
- javascript - 工作 SQL 在 pg-promise 中产生语法错误