SED-команда не работает должным образом

Я использую Ubuntu Over WSL. Похоже, SED не работает должным образом. Он не заменяет текст, если текст поиска в более чем один символ.

Когда я выполняю следующую команду

SED 'S / L / XYZ / GI'

, он отлично работает, где, как когда я переключаюсь в слово, как localhost

SED 'S / localhost / xyz / gi '

тогда он перестает работать. Любые указатели?

Обновление: я использую SED версии 4.4

sed --version
sed (GNU sed) 4.4
2
задан 15 March 2021 в 03:23

1 ответ

Замените текущий файл/etc/netplan/* .yaml и измените enpxxx на правильное имя второго интерфейса...

# This is the network config written by 'subiquity'
network:
  version: 2
  renderer: networkd
  ethernets:
    enp4s0:
      dhcp4: true
      optional: true
    enpxxx:
      dhcp4: true
      optional: true

sudo netplan generate

sudo netplan apply

перезагрузка

-121--908974-

Столкнувшись с чем-то похожим в -замене PowerShell только на этой неделе, я предположу, что в вашем вводе могут быть дополнительные символы, которые вы не видите. Попробуйте использовать hexdump -C для заменяемого текста.

Например, команда wsl.exe сама выводит UTF-16 (возможно, даже несколько неправильный), который в основном помещает 0-байтовый символ после каждого символа ASCII (извиняется, если моя терминология кодирования символов не совсем верна):

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.|
...

A wsl.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)
...
1
ответ дан 18 March 2021 в 23:26

Другие вопросы по тегам:

Похожие вопросы: