文字列を解析したい (awk/sed/grep を使用):
"EffTimeStamp=20110203-210000#InputCtxNm=Forigen Exchange Today#RunType=EOD"
結果は次のようになります。
EffTimeStamp="20110203-210000"
InputCtxNm="Forigen Exchange Today"
RunType="EOD"
お知らせ下さい。
いくつかの異なる置換が必要ですが、これ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"
どのシェルを使用していますか?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[@]}"
またはおよび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
これがお役に立てば幸いです。
(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