清理此unix命令的「最佳」方法是什麼? (例如,一個乾淨的sed命令)將complex tr命令轉換爲sed語句
cat file.txt | tr '\t' '|' | tr '|\n' '|' | tr -s '|' | tr '"' '\n' | sed "/^|/d"
我的工作流程是類似以下內容:
- 更換卡口與管道
- 只需管
- 擠壓掉重複更換管+新線管子
- 用「換行」標記
- 刪除每行上的額外
(我用SED更換標籤,新的生產線,等有問題,所以這就是爲什麼我用TR)
清理此unix命令的「最佳」方法是什麼? (例如,一個乾淨的sed命令)將complex tr命令轉換爲sed語句
cat file.txt | tr '\t' '|' | tr '|\n' '|' | tr -s '|' | tr '"' '\n' | sed "/^|/d"
我的工作流程是類似以下內容:
(我用SED更換標籤,新的生產線,等有問題,所以這就是爲什麼我用TR)
sed -n 'H;${s/\t/|/g;s/\|\n/|/g;s/\|{2,\}/|/;s/"/\
/g;s/\(\n\)\|\{1,\}/\1/g;s/.//p;}' file.txt
您的訂單和順序幾乎因改爲可能性,創造新每次修改後都有一個可用的模式
這可能爲你工作(GNU SED):
sed 's/\t/|/g;:a;$!N;s/|\n/|/;ta;s/|\+/|/g;s/"/\n/g;s/^|//Mg;P;D' file
最後的操作是有點曖昧 - 刪除|
或刪除行?我選擇刪除|
。
刪除線使用s/^|.*$//Mg
。
無採樣的輸入和預期的輸出,它只是猜測,但是這可能會做你想要什麼:
awk -v RS='^$' -v ORS= '{ gsub(/\t/,"|"); gsub(/\|\n/,"|"); gsub(/\|+/,"|"); gsub(/"/,"\n"); gsub(/(^|\n)\|/,""); print }' file
以上使用GNU AWK多焦RS。
當您向我們展示預期的輸入/輸出時,可能會有一個更簡單的awk解決方案,上面只是將您的tr和sed命令翻譯成awk語法,這可能不是慣用的最佳方法。
一個例子會更好。 – 2014-10-17 09:24:24
顯示你的輸入和期望的輸出會更有幫助。有些方法可以清理你所做的事情,但鑑於你正在試圖做什麼的知識,可能會有一種完全不同的方式去實現它。請更新您的問題。 – 2014-10-17 09:44:20
該過濾器的規格是什麼,即需要轉換或刪除的內容?沒有這個,我們需要從你的(不雅)實現中反向工程! – 2014-10-17 09:45:11