清理此unix命令的“最佳”方法是什么? (例如一个干净的sed命令)
cat file.txt | tr '\t' '|' | tr '|\n' '|' | tr -s '|' | tr '"' '\n' | sed "/^|/d"
我的工作流程类似于以下内容:
(我在使用sed替换标签,换行等方面遇到了问题,这就是我使用tr的原因)
答案 0 :(得分:0)
sed -n 'H;${s/\t/|/g;s/\|\n/|/g;s/\|{2,\}/|/;s/"/\
/g;s/\(\n\)\|\{1,\}/\1/g;s/.//p;}' file.txt
由于可能会在每次修改后创建新的可忽略模式,因此您的订单和顺序很难更改。
答案 1 :(得分:0)
这可能适合你(GNU sed):
sed 's/\t/|/g;:a;$!N;s/|\n/|/;ta;s/|\+/|/g;s/"/\n/g;s/^|//Mg;P;D' file
最后一项操作有点模棱两可 - 删除|
或删除该行?
我选择删除|
。
要删除行,请使用s/^|.*$//Mg
。
答案 2 :(得分:0)
没有样本输入和预期输出,只是猜测,但这可能会做你想要的:
awk -v RS='^$' -v ORS= '{ gsub(/\t/,"|"); gsub(/\|\n/,"|"); gsub(/\|+/,"|"); gsub(/"/,"\n"); gsub(/(^|\n)\|/,""); print }' file
以上使用GNU awk进行多字符RS。
一旦你向我们展示了预期的输入/输出,可能有一个更简单的awk解决方案,上面只是将你的tr和sed命令翻译成awk语法,这可能不是惯用的最佳方法。