Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取文本文件中特定字符之间的字符串块;bash“;_Bash_Awk_Sed_Grep - Fatal编程技术网

获取文本文件中特定字符之间的字符串块;bash“;

获取文本文件中特定字符之间的字符串块;bash“;,bash,awk,sed,grep,Bash,Awk,Sed,Grep,有人能帮我找到复制字符串“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

有人能帮我找到复制字符串“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
****
我想为所有的“x0”(X=H,He…)做这件事,特别是为所有的“x0”获得这样一个孤立的文本:

因此,我想我必须找到一种方法,使用包含“x0”的字符串来实现它。
我试图使用
grep-A2000'h0'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$/
/^\*\*\**$/
匹配的块数量相同。如果记录以4星分隔,则文件索引从1开始。

。需要
gawk

$ awk -v RS='\\*\\*\\*\\*\n' '$1~/^He?$/{printf "%s", $0 RT > FILENAME $1}' file

这将只提取
H
He
记录。如果不想限制,只需在大括号之前删除条件。(相当于
$1==“H”|$1==“He”

欢迎来到SO,请在您的帖子中发布更有意义的输入和输出示例。和
awk '/^[^ ]+ 0$/{p=1;++c}/^\*\*\*\*$/{print >>FILENAME c;p=0}p{print >> FILENAME c}' file
$ awk -v RS='\\*\\*\\*\\*\n' '$1~/^He?$/{printf "%s", $0 RT > FILENAME $1}' file