1
#!/bin/ksh
FILE_NAME=pltlog.20130801152242
LINE_NOS=`grep -n "SEND MSEG" $FILE_NAME|awk -F: '{print $1}'`
sed -n "1,52p" $FILE_NAME
echo "This is a test"
#for start_line in $LINE_NOS
#do
# ((end_line=start_line+51))
# sed -n "$start_line, ${end_line}p" $FILE_NAME |grep "<"|grep -v "RECV MESG" |sed 's/^\[[^<]*</</'
# echo
#done
我只是寫了這些代碼來抓取一些xml,但總是有^ M的重定向結果文件(所有行,但回顯行)。經過大量時間的實驗後,'回聲'似乎是問題,沒有回聲,一切都很好。在Mac OS X 10.9和Ubuntu 12.04相同的結果,這裏是結果文件中的內容:msg.sh>結果爲什麼在sed後回顯使其他行以^ M結尾
[ ] 15:22:42:150 esbclient_send.c:326 PID:4980956 TID:0 SID:759506 [DEBUG]SMSP: SEND MSEG: [<?xml version="1.0" encoding="UTF-8"?>^M
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">^M
<soapenv:Body>^M
<p0:sendSMS xmlns:p2="http://esb.xxxx.com" xmlns:p1="http://smsp.service.xxxx.com/abstraction/atomic/business.SmsSendService/schema/v1" xmlns:p0="http://smsp.service.xxxx.com/abstraction/atomic/business.SmsSendService/v1">^M
<p2:requestHeader>^M
<p2:version>1.0</p2:version>^M
<p2:serialNo>783300013080100000000000003276500000</p2:serialNo>^M
<p2:refSerialNo></p2:refSerialNo>^M
<p2:requestId></p2:requestId>^M
<p2:requestTime></p2:requestTime>^M
<p2:timeOutTime></p2:timeOutTime>^M
<p2:channelId></p2:channelId>^M
<p2:channelSerialNo>783300013080100000000000003276500000</p2:channelSerialNo>^M
</p2:requestHeader>^M
<p1:msgID>0043559765</p1:msgID>^M
<p1:phoneNum></p1:phoneNum>^M
<p1:msgContent></p1:msgContent>^M
<p1:bizKind></p1:bizKind>^M
<p1:msgContent></p1:msgContent>^M
<p1:bizKind></p1:bizKind>^M
<p1:bizSys>330</p1:bizSys>^M
<p1:bizCode>37371</p1:bizCode>^M
<p1:dtSent></p1:dtSent>^M
<p1:bizOrgan></p1:bizOrgan>^M
<p1:bizTotal></p1:bizTotal>^M
<p1:cardAccount></p1:cardAccount>^M
<p1:bankBook>6216882031000005888</p1:bankBook>^M
<p1:subAccount></p1:subAccount>^M
<p1:dtBiz>20131011</p1:dtBiz>^M
<p1:tmBiz>152052</p1:tmBiz>^M
<p1:dtYear></p1:dtYear>^M
<p1:dtMon></p1:dtMon>^M
<p1:dtDay></p1:dtDay>^M
<p1:dtHour></p1:dtHour>^M
<p1:dtMin></p1:dtMin>^M
<p1:bizTime>20130801152242</p1:bizTime>^M
<p1:productName>SS1012</p1:productName>^M
<p1:oldBalance></p1:oldBalance>^M
<p1:moneyOut></p1:moneyOut>^M
<p1:moneyIn></p1:moneyIn>^M
<p1:balance></p1:balance>^M
<p1:moneyIn></p1:moneyIn>^M
<p1:balance></p1:balance>^M
<p1:transAmount></p1:transAmount>^M
<p1:borrowingFlag></p1:borrowingFlag>^M
<p1:bizSeq></p1:bizSeq>^M
<p1:period></p1:period>^M
<p1:accrual></p1:accrual>^M
<p1:accrualTax></p1:accrualTax>^M
<p1:interestRate></p1:interestRate>^M
<p1:subCode></p1:subCode>^M
<p1:urgent></p1:urgent>^M
<p1:ext1></p1:ext1>^M
</p0:sendSMS>^M
</soapenv:Body>^M
</soapenv:Envelope>^M
This is a test
誰能告訴我,爲什麼出現這種情況,我該如何避免像這種情況呢?謝謝。
這是它是如何*顯示*在一個*特定的環境* - sed的結果不會*改變。也就是說,哪個*編輯器查看結果文件?因爲它很可能會根據啓發式來改變模式。 – user2864740
我認爲編輯器顯示是一個非常可能的答案,但要確認,您可以解構每個進程,並將'| cat -vet「,以確認是否在該點添加了^ M個字符。 (cat -vet將顯示^ I爲標籤,^ M爲\ r,'$'在每行末尾。'$'不在文件中。祝你好運。 – shellter
是你的問題「我該如何擺脫'sed'「輸出中的^ M個字符,或者」我如何向'echo'輸出添加^ M字符「?我懷疑這是因爲你的原始XML文件具有DOS風格的行結尾,但是'echo'只是創建一個* nix風格的行結尾... – twalberg