-1

文字列を解析したい (awk/sed/grep を使用):

"EffTimeStamp=20110203-210000#InputCtxNm=Forigen Exchange Today#RunType=EOD"

結果は次のようになります。

EffTimeStamp="20110203-210000"
InputCtxNm="Forigen Exchange Today"
RunType="EOD"

お知らせ下さい。

4

4 に答える 4

1

いくつかの異なる置換が必要ですが、これsedを行うことができます。

sed 's/^"//; s/=/="/g; s/#/"\n/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"
于 2012-05-07T15:28:59.830 に答える
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[@]}"
于 2012-05-07T15:40:37.397 に答える
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

これがお役に立てば幸いです。

于 2012-05-07T15:42:09.443 に答える
0

(Input Record Separator) と(Output Record Separator)を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
于 2012-05-08T13:41:21.083 に答える