我正在寻找一个in place
命令更改与:.:.
在一条线组合两个sed命令
从
chr01 1453173 . C T 655.85 PASS . GT:AD:DP:PGT:PID 0/1:25,29:54:.:.
最终要
chr01 1453173 . C T 655.85 PASS . GT:AD:DP 0/1:25,29:54
在单词的所有文件中的行,我基本上从任何以:.:.
结尾的行删除:PGT:PID
和:.:.
我正在寻找一个in place
命令更改与:.:.
在一条线组合两个sed命令
从
chr01 1453173 . C T 655.85 PASS . GT:AD:DP:PGT:PID 0/1:25,29:54:.:.
最终要
chr01 1453173 . C T 655.85 PASS . GT:AD:DP 0/1:25,29:54
在单词的所有文件中的行,我基本上从任何以:.:.
结尾的行删除:PGT:PID
和:.:.
随着GNU的sed和Solaris的sed:
sed '/:\.:\.$/{s///;s/PGT:PID//;}' file
如果你想编辑与GNU文件的sed “到位” 使用选项-i
。
您正在寻找的东西,如:
sed -i.bak "/^.*:\.:\.$/ {s/:PGT:PID//g; s/:\.:\.//g;}" file
/^.*:\.:\.$/
限制s命令来在:.:.
的.
需要结束行因为它们是正则表达式的特殊字符s
sommand用空字符串替换字符串@EdMorton感谢您的建议,我改进了答案。 –
使用awk那会是:
awk 'sub(/:\.:\.$/,""){sub(/:PGT:PID/,"")} 1' file
chr01 1453173 . C T 655.85 PASS . GT:AD:DP 0/1:25,29:54
和就地与gawk的编辑,你可以添加-i inplace
选择,而与任何awk的,你可以再补充> tmp && mv tmp file
。
作为一个班轮:
sed -i -e '/:\.:\.$/!n' -e 's///' -e 's/:PGT:PID//g' "$file"
扩展:
/:\.:\.$/!n # leave lines untouched unless they end in ":.:."
s/// # replace the matched ":.:." with nothing
s/:PGT:PID//g # replace ":PGT:PID" with nothing, everywhere
我们使用-i
标志进行就地编辑。为便于携带,我们将每行作为单独的-e
表达式进行传递:某些sed实现允许将几个命令与;
级联,但POSIX标准不要求这样做。
Toby Speight,感谢您的编辑。 – Cyrus