【问题标题】:hex search and replace characters with sed linux用 sed linux 十六进制搜索和替换字符
【发布时间】:2018-06-06 18:48:23
【问题描述】:

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

数据位于文件tested.in1.txt 和tested.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 下转换字符串并愿意向我展示如何使其工作。

【问题讨论】:

  • 你告诉我们很多关于你想怎么做的事情,而关于你想做的事情还不够。 edit 你的问题包括给定输入的预期输出,这样我们就可以帮助你做你想做的事情,而不是实施,但是你认为你应该这样做。见xyproblem.info

标签: linux string sed replace


【解决方案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 存在相同的问题。

【讨论】:

  • 这让我明白了。我不知道那个时期。最后我对 $ 有同样的问题。甚至 \$ 也不匹配。但是你给的灵魂解决了问题,谢谢:)
  • @BobC 太棒了!请考虑接受答案和/或投票。
  • 是的,我确实“赞成”了您的答案,因为它确实有效并回答了我的问题,但我没有看到“接受”它的选项。它说我没有 15 个帖子,因此我的投票不会被包括在内。我确实有一个按钮来回答我自己的问题,但你的回答有效。
猜你喜欢
  • 2011-12-07
  • 1970-01-01
  • 2013-03-12
  • 1970-01-01
  • 1970-01-01
  • 2018-11-12
  • 1970-01-01
  • 1970-01-01
  • 2019-07-27
相关资源
最近更新 更多