繁体   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