我正在尋找一個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