sed: удалить лишние пробелы к одному пробелу между строками, оставив нетронутыми ведущие табуляции

. Вы можете достичь того же результата, используя команду GDB 'dump memory' и запишите ее в / dev / null.

Вам просто нужно найти регионы в / proc / $ PID / smaps, которые нужно отменить. пример из / proc / $ PID / smaps:

02205000-05222000 rw-p 00000000 00:00 0 
Size:              49268 kB
Rss:               15792 kB
Pss:                9854 kB
Shared_Clean:          0 kB
Shared_Dirty:      11876 kB
Private_Clean:         0 kB
Private_Dirty:      3916 kB
Referenced:          564 kB
Anonymous:         15792 kB
AnonHugePages:         0 kB
Swap:              33276 kB
KernelPageSize:        4 kB
MMUPageSize:           4 kB

, а затем используйте режим --batch для выполнения команды gdb, чтобы вы могли использовать ее в своей функции:

[root@nunya ~]# swapon -s ; gdb --batch --pid 33795 -ex "dump memory /dev/null 0x02205000 0x05222000" ;swapon -s
Filename                Type        Size    Used    Priority
/dev/sda2                               partition   7811068 7808096 -1

[Thread debugging using libthread_db enabled]

Filename                Type        Size    Used    Priority
/dev/sda2                               partition   7811068 7796012 -1
0
24.09.2018, 14:00
2 ответа

Как далеко бы

sed -rn '\#/\*\*#,\#\*\/*# {p;b}; s/([^ ]) +/\1 /g; p' file

понял? Он печатает немодифицированные строки комментариев (, не может обрабатывать комментарии вкл/выкл в той же строке, хотя )и пропускает остальную часть скрипта. Для незакомментированных строк он сжимает любые несколько пробелов, следующих за не -символом пробела (, поэтому отступ строки выходит за рамки )до одного пробела.

1
28.01.2020, 04:13

Наконец-то это сработало для меня:

sed -i 's/\([a-zA-Z]\+\)\( *\)\([a-zA-Z]\+\)/\1 \3/g' $1

0
28.01.2020, 04:13

Теги

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