sed 命令未按预期工作

阿蒂夫

我在 WSL 上使用 Ubuntu。看起来 sed 没有按预期工作。如果搜索文本超过一个字符,它不会替换文本。

当我执行以下命令时

sed 's/l/XYZ/gi'

当我将 l 切换到像 localhost 这样的词时,它工作得很好

sed 's/localhost/XYZ/gi'

然后它停止工作。任何指针?

更新:我使用的是 sed 4.4 版

sed --version
sed (GNU sed) 4.4
NotTheDr01ds

-replace本周刚刚在 PowerShell 中遇到了类似的问题,我将推论您的输入中可能存在您看不到的额外字符。hexdump -C在您要替换的文本上尝试 a

例如,wsl.exe命令本身输出 UTF-16(甚至可能有点格式错误),它基本上在每个 ASCII 字符之后放置一个 0 字节字符(如果我的字符编码术语不太正确,请道歉):

wsl.exe -l | hexdump -c

00000000  57 00 69 00 6e 00 64 00  6f 00 77 00 73 00 20 00  |W.i.n.d.o.w.s. .|
00000010  53 00 75 00 62 00 73 00  79 00 73 00 74 00 65 00  |S.u.b.s.y.s.t.e.|
00000020  6d 00 20 00 66 00 6f 00  72 00 20 00 4c 00 69 00  |m. .f.o.r. .L.i.|
...

Awsl.exe -l | sed 's/W/B/'将导致:

Bindows Subsystem for Linux Distributions:
Ubuntu (Default)
...

wsl -l | sed 's/Windows/GatesOS/'将无法替换任何东西,类似于您遇到的情况:

Windows Subsystem for Linux Distributions:
Ubuntu (Default)
...

如果这是您面临的问题,至少 Linux/WSL 下的解决方案比 PowerShell 下更容易。只需用于iconv将输入从 UTF16 转换为更易于管理的内容,例如 UTF8:

wsl.exe -l | iconv -f UTF16 -t UTF8 | sed 's/Windows/GatesOS/'

GatesOS Subsystem for Linux Distributions:
Ubuntu (Default)
...

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章