字符串中的正则表达式和2个不同列中的输出bash

字符串中的正则表达式和2个不同列中的输出bash

我在 macOS Mojave 上尝试使用正则表达式在两个不同的列中输出匹配的结果

我有一个包含以下字符串的文件:

JJ1111-Aaaaaa-AB-22222222-f_2-777777_S1_L000_trtrt
JJ1111-Baaaaa-AB-22322222-f_2-777777_S1_L000_trtrt
JJ1111-Caaaaa-AB-22222322-f_2-777777_S1_L000_trtrt

我想提取“Aaaaaa”(或6个连续字符的字符串)和2个大写字母“AB”的字符串。

现在命令

egrep -oh '[a-zA-Z]{6}' my.txt

将返回

Aaaaaa
Baaaaa
Caaaaa

egrep -oh '\-[A-Z]{2}' my.txt | sed 's/-//g'

将返回

AB
AB
AB

有没有办法 (我想使用 awk) 将两个匹配项输出到一个新文件中,该文件有两列,用制表符分隔?我试过这个:

awk '{$1 ~ /[a-zA-Z]{6}/; print $1}' my.txt

但只给我原始字符串

答案1

我认为这里最直接的工具是cut

cut -sf 2,3 -d '-' --output-delimiter=$'\t' my.txt > output.txt

如您所见,使用-作为分隔符,它获取第 2 和第 3 个字段并将破折号转换为制表符。输出写入output.txt

答案2

既然您已经编写了可用的正则表达式......为什么不继续使用它们:
如果您在“inputfile”中有数据

sed -rne 's/.*([a-zA-Z]{6})\-([AZ]{2}).*/\1\t\2/p' <输入文件

添加
| od -t x1z -w10

...最后你会看到这个,来验证你得到了什么:

0000000 41 61 61 61 61 61 09 41 42 0a >Aaaaaa.AB.<
0000012 42 61 61 61 61 61 09 41 42 0a >Baaaaa.AB.<
0000024 43 61 61 61 61 61 09 41 42 0a >Caaaaa.AB.<
0000036

相关内容