十六进制搜索并用sed linux替换字符

问题描述 投票:0回答:1

我正在尝试重新格式化并压缩我从国家气象局获得的天气预报,然后将其显示在我的一个屏幕上。为此,我删除了不重要的换行符并将段落转换为一系列句子,压缩文本,然后重新格式化为显示所需的行长度。

数据位于文件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下转换字符串并愿意告诉我如何使其工作。

linux string sed replace
1个回答
1
投票

\x2E\x2E\x2E...相同,它将匹配任意三个连续字符(在解析正则表达式之前执行十六进制表示法的转换)。由于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有同样的问题。

© www.soinside.com 2019 - 2024. All rights reserved.