我在 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
-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] 删除。
我来说两句