如何从文件中删除匹配的模式?
每次出现模式[my_id=
时,都应将其删除而不予替换。
例如,字段[my_id=AB_123456789.1]
应为AB_123456789.1
。
我已经尝试过,没有结果
sed '/\[my\_id\=/d'
awk '$(NF-1) /^[protein\_id\=/d'
还可以删除最后一个字段中的前n个字符($(NF-1))吗?
感谢您的帮助
答案 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