gpt4 book ai didi

linux - Sed 替换失败,UTF-8 编码

转载 作者:太空狗 更新时间:2023-10-29 12:31:27 25 4
gpt4 key购买 nike

我正在尝试进行一些文件内容转换。我在带有文本编码的 Linux 中运行:

echo $LANG
en_US.UTF-8

我在 Window -> Translation -> Remote character set -> UTF-8 下使用以下配置从 Putty 终端访问

我有以下日志文​​件,我想对其进行转换:

cat test.log | head

这是我在终端中看到的/如果我使用 nano 编辑文件/如果我将终端内容复制并粘贴到 Windows 的记事本中(注意第一个 IP 后的三个破折号):

10.0.2.4 - - - Cookie= -  [11/Jun/2014:12:51:48 +0000]
"GET /hub/ HTTP/1.1" 302 0 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20140429 Firefox/24.0 Iceweasel/24.5.0" "1.1.1.1"

这是我在 Windows 中将内容复制/粘贴到此处/写字板时看到的内容(注意第一个 IP 后只有一个破折号):

10.0.2.4 ­ - ­ Cookie= -  [11/Jun/2014:12:51:48 +0000]
"GET /hub/ HTTP/1.1" 302 0 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20140429 Firefox/24.0 Iceweasel/24.5.0" "1.1.1.1"

我尝试使用 sed 应用以下转换:

cat test.log | sed "s,- - - Cookie=,-,g"

转换没有做任何事情我得到了与以前相同的结果(不同取决于我查看/复制粘贴的位置)。

如果我用鼠标选择并从终端上的文件内容中复制模式“- - - Cookie=”,然后使用 sed 命令将其粘贴到终端上,那么它确实可以很好地替换。

在终端上获得此结果并将其复制粘贴到其他地方:

10.0.2.4 - -  [11/Jun/2014:12:51:48 +0000]
"GET /hub/ HTTP/1.1" 302 0 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20140429 Firefox/24.0 Iceweasel/24.5.0" "1.1.1.1"

所以我创建了一个脚本,用鼠标选择并从终端上的文件内容中复制粘贴破折号“-”并将其替换为“手动”键入的破折号:

cat test.log | sed "s,-,-,g" > test1.log

(第一个破折号是从文件内容复制粘贴的,第二个破折号是手动编写的)。

但是,我仍然无法使文件 test1.log 上的 sed 转换正常工作:

cat test.log | sed "s,- - - Cookie=,-,g"

产生与最初相同的结果...

文件编码为UTF-8:

file -bi test.log
text/plain; charset=utf-8

最佳答案

你正在用 - 替换 - - - Cookie= 当然你会得到 - -,这就是你告诉它要做的.如果您想保留 Cookie= 部分,您需要将其添加到替换文本中。尝试:

cat test.log | sed 's/- - - Cookie=/- Cookie=/g'

注意:在 sed 中使用单引号优于双引号,您不能忘记取消转义 $-s 和 \- s 在双引号内仍然有效。此外,虽然您可以在 sed 中使用任何分隔符,但首选 /,它看起来比 , 好很多。

关于linux - Sed 替换失败,UTF-8 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25798197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com