我在 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