如何从一个位置切到另一个位置,如果 2 个位置在 unix 中匹配

How to cut from one position to another , if 2 positions having a match in unix

我有这样一个文件

ABCDEFGH  
IJKLMNOP
QRSTUFWH

如果第 6 个位置 = F,如果第 8 个位置 = H 我要从位置2切到位置4

所以输出应该是

BCD
RST

我可以使用这个将具有匹配模式的记录保存到另一个文件中 -

grep  '^.....F.H' f1.txt > f2.txt

我想要的只是位置 2 到 4 ,与模式匹配。 请帮忙 谢谢

这个 POSIX awk 应该适用于大多数系统:

awk '=="F" && =="H" {print }' FS="" file
BCD
RST

通过将字段分隔符设置为空,每个字符都变成一个字段,因此只需测试字段 6 和 8,然后打印字段 2-4。

能否请您尝试以下。

awk 'substr([=10=],6,1)=="F" && substr([=10=],8,1)=="H"{print substr([=10=],2,3)}' Input_file

由于您在问题中添加了 Solaris 标签,如果您使用的是 Solaris,请尝试将 awk 更改为 /usr/xpg4/bin/awk

这可能对你有用 (GNU sed):

sed -En 's/^.(...).F.H.*//p' file

模式匹配并使用分组和反向引用来提取所需的字符串。