可能需要每行捕获多个表达式的正则表达式 (sed)

标签 regex sed awk

我正在尝试编写一个正则表达式来捕获文件中的名称,其中某些行可能有 2 个或更多名称需要捕获。

例如,我想带一个文件:

Field_1 \t Field_2 \t Field_3 \t JGN;Name=hsa-123;J4N9;Name=cfa-241-b
Field_1 \t Field_2 \t Field_3 \t JPN;Name=hsa-1323;JJ39;Name=cfa-255-b;Name=hsa-188

并返回一个输出文件:
Field_1 \t Field_2 \t Field_3 \t hsa-123; cfa-241-b
Field_1 \t Field_2 \t Field_3 \t hsa-1323;cfa-255-b;hsa-188

我使用正则表达式如下:
sed 's/\(.*\)\t\(.*\)\t\(.*\)\t.*\;Name=\(.*\);.*/\1\t\2\t\3\t\4\;\4/g'

但这只会返回名字。任何建议将不胜感激

最佳答案


sed 's/\([[:space:]]\|;\)[[:alnum:]]*;/\1/g; s/Name=//g'

为你工作?

关于可能需要每行捕获多个表达式的正则表达式 (sed),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13076294/

相关文章:

javascript - 有条件地去除 HTML 标记内容的正则表达式

java - ^A 的正则表达式模式

shell - 如何在 unix 中将一个 shell 脚本的输出捕获到另一个

perl - linux中根据条件合并后续行

bash - 在 Bash 中按字母顺序排序

regex - 使用正则表达式获取括号之间的子字符串

Javascript Regex 捕获组至少有 1 个非数字的两种形式 : delimited by space and enclosed in quotes

regex - 无法使提到的正则表达式在 sed 命令中工作

linux - "quick select"(或类似)在 Linux 上的实现? (而不是 sort|uniq -c|sort -rn|head -$N)

linux - 如何在linux shell脚本中获取预期的字符串