Добавить двойные кавычки к первому вхождению = после разделителя | в файле

Después de leer Linux drivers/net/tun.cy OpenBSD sys/net/if_tun.c, llegué a la conclusión de que ambos usan colas para los paquetes.

Específicamente, Linux usa una cola dentro del controlador tun/tap y OpenBSD usa la cola de la pila de red preexistente.

No he probado manualmente la funcionalidad de la cola.

0
23.05.2019, 13:51
3 ответа
sed 's/=/"="/1' file |sed 's/=/"="/2'
0
28.04.2021, 23:33
$ cat file
Input: Ver=7|errmsg=0=sucess,1=failue
$ awk -F '|' 'BEGIN { OFS=FS } { sub("=", "\"=\"", $2); print }' file
Input: Ver=7|errmsg"="0=sucess,1=failue

Это использует awkи обрабатывает данные как два|-поля с разделителями. Вызов sub()заменяет первое =во втором поле на "=". Измененная строка затем печатается.

Чтобы изменить =после каждого разделителя (, если полей больше двух ), используйте цикл:

awk -F '|' 'BEGIN { OFS=FS } { for (i = 2; i <= NF; ++i) sub("=", "\"=\"", $i); print }' file

Чтобы внести изменения в -место, используя последнюю версию GNUawk:

awk -i inplace -F '|' 'BEGIN { OFS=FS } { for (i = 2; i <= NF; ++i) sub("=", "\"=\"", $i); print }' file

С не -GNUawk:

cp file file.tmp
awk -F '|' 'BEGIN { OFS=FS } { for (i = 2; i <= NF; ++i) sub("=", "\"=\"", $i); print }' file.tmp >file
rm file.tmp
0
28.04.2021, 23:33

Вы можете использовать GNU sedс включенным механизмом расширенных регулярных выражений:

$ sed -Ee 's/((^|[|])[^|=]*)=/\1"="/g' input.txt
0
28.04.2021, 23:33

Теги

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