如何删除匹配模式?

时间:2014-01-13 14:58:53

标签: regex bash sed awk

如何从文件中删除匹配的模式?

每次出现模式[my_id=时,都应将其删除而不予替换。

例如,字段[my_id=AB_123456789.1]应为AB_123456789.1

我已经尝试过,没有结果

sed '/\[my\_id\=/d'
awk '$(NF-1) /^[protein\_id\=/d' 

还可以删除最后一个字段中的前n个字符($(NF-1))吗?

感谢您的帮助

2 个答案:

答案 0 :(得分:5)

您可以使用:

sed 's/\[my_id=\([^]]*\)\]/\1/g' file
  • \[my_id=\([^]]*\)\]查找此内容并替换内部文字(\1)。
  • \[my_id=\([^]]*\)\]表示[my_id=加上不包含]的字符串,其中包含\(...\)语法,以\1打印回来。

测试

$ cat a
hello [my_id=AB_123456789.1] bye
adf aa [my_id=AB_123456789.1] bbb

$ sed 's/\[my_id=\([^]]*\)\]/\1/g' a
hello AB_123456789.1 bye
adf aa AB_123456789.1 bbb

答案 1 :(得分:2)

你可以在awk

中尝试这样的事情
$ cat <<test | awk 'gsub(/\[my_id=|\]/,"")'
  hello [my_id=AB_123456789.1] bye
  adf aa [my_id=AB_123456789.1] bbb
  test

  hello AB_123456789.1 bye
  adf aa AB_123456789.1 bbb