我想解析一个字符串(使用awk / sed / grep):
"EffTimeStamp=20110203-210000#InputCtxNm=Forigen Exchange Today#RunType=EOD"
结果应该是:
EffTimeStamp="20110203-210000"
InputCtxNm="Forigen Exchange Today"
RunType="EOD"
请告知。
答案 0 :(得分:1)
需要几个不同的替换,但sed
可以做到这一点。
sed 's/^"//; s/=/="/g; s/#/"\n/g'
e.g。
% echo '"EffTimeStamp=20110203-210000#InputCtxNm=Forigen Exchange Today#RunType=EOD"' |
sed 's/^"//;s/=/="/g;s/#/"\n/g'
EffTimeStamp="20110203-210000"
InputCtxNm="Forigen Exchange Today"
RunType="EOD"
答案 1 :(得分:0)
你使用的是什么外壳?对于bash,你可以写
str="EffTimeStamp=20110203-210000#InputCtxNm=Forigen Exchange Today#RunType=EOD"
oifs=$IFS
IFS="#"
set -- $str
IFS=$oifs
printf "%s\n" "$@"
输出
EffTimeStamp=20110203-210000
InputCtxNm=Forigen Exchange Today
RunType=EOD
如果您不想使用位置参数,可以将值存储为数组:
arr=($str)
printf "%s\n" "${arr[@]}"
答案 2 :(得分:0)
或 awk 解决方案
echo "EffTimeStamp=20110203-210000#InputCtxNm=Forigen Exchange Today#RunType=EOD" \
| awk -F# -v OFS="\n" '{for (i=1;i<=NF; i++) printf("%s%s", $i, (i==NF ? "\n" : OFS)) }'
<强>输出强>
EffTimeStamp=20110203-210000
InputCtxNm=Forigen Exchange Today
RunType=EOD
我希望这会有所帮助。
答案 3 :(得分:0)
使用perl
修改$/
(输入记录分隔符)和$\
(输出记录分隔符)的一种简单方法:
echo -e "EffTimeStamp=20110203-210000#InputCtxNm=Forigen Exchange Today#RunType=EOD" |
perl -pe 'BEGIN { $/ = q[#]; $\ = qq[\n] }'
输出:
EffTimeStamp=20110203-210000#
InputCtxNm=Forigen Exchange Today#
RunType=EOD