如何翻转此文本:
From: "anonymous" <sip:[email protected]>;tag=1c1969267918
Call-ID: [email protected]
Max-Forwards: 70
From: "anonymous" <sip:[email protected]>;tag=1c6447025742
Call-ID: [email protected]
Max-Forwards: 70
进入这个:
From: "anonymous" <sip:[email protected]>;tag=1c1969267918, Call-ID: [email protected], Max-Forwards: 70
From: "anonymous" <sip:[email protected]>;tag=1c6447025742, Call-ID: [email protected], Max-Forwards: 70
答案1
除非预期输出中逗号后面的单个空格非常重要:
$ sed 's/^[[:blank:]]*//' file | paste -d, - - -
From: "anonymous" <sip:[email protected]>;tag=1c1969267918,Call-ID: [email protected],Max-Forwards: 70
From: "anonymous" <sip:[email protected]>;tag=1c6447025742,Call-ID: [email protected],Max-Forwards: 70
首先用于sed
删除输入文件中每行上的初始空格,然后使用paste
, 将结果行分布在三列中,并以逗号作为分隔符。
答案2
和awk
:
awk '{sub(/^[[:blank:]]*/, ""); ORS = NR % 3 ? ", " : "\n"; print}' < your-file
答案3
如果你想在 shell 中执行此操作:
n=0
while read x; do
echo -n "$x"
n=$((n+1))
if [ $((n%3)) = 0 ]; then
echo
else
echo -n ', '
fi
done < inputfile
这会一行一行地读取,并进行计数。每第三行(该$((n%3))
部分计算模数)输出一个换行符,否则输出逗号(和示例中的空格)。这echo -n
可以防止echo
添加换行符本身。
答案4
我相信可以做得更好。但效果很好。
gnu sed:第一个表达式删除前导空格。第二个表达式连接以下行匹配/From:/
并删除前导空格。第二个表达式连接以下行匹配/Call-ID:/
并删除前导空格。
sed -e 's/^[[:blank:]]*//' \
-e '/From:/N;s/\n[[:blank:]]*/, /' \
-e '/Call-ID:/N;s/\n[[:blank:]]*/, /'