簡體   English   中英

十六進制搜索並用sed linux替換字符

[英]hex search and replace characters with sed linux

我正在嘗試重新格式化和壓縮從國家氣象局獲得的天氣預報,然后將其顯示在我的conky屏幕的一部分上。 為此,我刪除了不重要的換行符,將段落變成一系列句子,壓縮文本,然后重新格式化為顯示所需的行長。

數據位於文件testsed.in1.txt和testsed.in2.txt中,為簡單起見,我們可以對兩者使用相同的數據。 文件中沒有非ASCII字符。 我將其簡化以說明問題,通常是相當長且冗長的,這就是為什么我需要精簡它。

918 PM CST Sun Dec 24 2017~. TONIGHT...Cloudy with ~flurries. Lows 11 to 15. ~.CHRISTMAS DAY...Windy. Flurries and~light snow showers. Temperatures~nearly steady 12 to 16. ~.MONDAY NIGHT...Partly cloudy. Lows 1 below to 3 above zero. Wind~chills as low as 10 below zero. Northwest winds 10 to~15 mph. ~.TUESDAY...Mostly sunny. Wind chills as low~as 10 below to 20 below zero. ~.SATURDAY NIGHT...Mostly cloudy. A 30 percent chance of snow in~the evening. ~.SUNDAY...Mostly cloudy. Highs 15 to 19. ~$$~

他們在文本中添加了...序列,我想用-破折號代替。 我不想在下一部分代碼中尋找重要換行符的句點字符引起問題。 這根本不起作用,並且將整個文件轉換為一系列破折號,除了文件末尾的$〜以外,不只是連續三個周期的序列。

cat testsed.in1.txt | sed -e "s/\x2E\x2E\x2E/\x2D/g" > testsed.out1.txt

----------------------------------------------------------------------------------------------------------------------------------------------------------------------$~

其次,我需要找到重要的換行符應該放在哪里,即\\ x7E \\ x2E並將其轉換為\\ x07 \\ x2E字符。 這部分起作用,但是每次都會覆蓋以下字符。 我這樣做的原因是因為我真的想將所有未跟着\\ x2E的\\ x7E轉換為空格,然后使用tr將\\ x07轉換為\\ x0A換行符。

cat testsed.in2.txt | sed -e "s/\x7E\x2E/\x07\x2E/g" > testsed.out2.txt

918 PM CST Sun Dec 24 2017. TONIGHT...Cloudy with .lurries. Lows 11 to 15. .CHRISTMAS DAY...Windy. Flurries and.ight snow showers. Temperatures.early steady 12 to 16. .MONDAY NIGHT...Partly cloudy. Lows 1 below to 3 above zero. Wind.hills as low as 10 below zero. Northwest winds 10 to.5 mph. .TUESDAY...Mostly sunny. Wind chills as low.s 10 below to 20 below zero. .SATURDAY NIGHT...Mostly cloudy. A 30 percent chance of snow in.he evening. .SUNDAY...Mostly cloudy. Highs 15 to 19. .$~

這是我在這里的第一個問題,因此如果我有任何錯誤,我謹此致歉。 希望這里的人熟悉在Linux下轉換字符串,並願意向我展示如何使其工作。

\\x2E\\x2E\\x2E...相同,它將匹配任何三個連續的字符(在解析正則表達式之前執行從十六進制表示法的轉換)。 由於testsed.in1.txt的示例文本testsed.in1.txt為500個字符,請使用sed將其轉換為166個破折號,並保持2個字符不變(500 = 166 * 3 + 2)。

我會用類似的東西

sed -e "s/\.\.\./-/g" testsed.in1.txt > testsed.out1.txt

也許

sed -e "s/[.]\{3\}/-/g" testsed.in1.txt > testsed.out1.txt

問題的第二部分也遇到了\\x2E的相同問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM