Как удалить все экземпляры конкретного символа от текстового файла?

Это обновляется как и когда процесс получает/удаляет свои переменные среды. У Вас есть ссылка, которая указывает environ файл не обновляется для процесса в его рабочем каталоге под/proc файловой системой?

xargs --null --max-args=1 echo < /proc/self/environ

или

xargs --null --max-args=1 echo < /proc/<pid>/environ

или

ps e -p <pid>

Вышеупомянутое распечатает переменные среды процесса в ps выходной формат, относящийся к обработке текстов (парсинг/фильтрация), требуется, чтобы рассматривать переменные среды как список.

Солярис (не спрошенный, но для ссылки я отправлю здесь):

/usr/ucb/ps -wwwe <pid>

или

pargs -e <pid> 

Править:/proc/pid/environ не обновляется! Я признаю ошибку. Процесс проверки ниже. Однако дети, от которых процесс fork'd, наследовали переменную среды процесса, и это видимо в их соответствующем/proc/self/environ файле. (Используйте строки),

С в оболочке: здесь xargs является дочерним процессом и следовательно наследовал переменную среды и также отражается в /proc/self/environ файл.

[centos@centos t]$ printenv  | grep MASK
[centos@centos t]$ export MASK=NIKHIL
[centos@centos t]$ printenv  | grep MASK
MASK=NIKHIL
[centos@centos t]$ xargs --null --max-args=1 echo < /proc/self/environ  | grep MASK
MASK=NIKHIL
[centos@centos t]$ unset MASK
[centos@centos t]$ printenv  | grep MASK
[centos@centos t]$ xargs --null --max-args=1 echo < /proc/self/environ  | grep MASK
[centos@centos t]$

Проверка его от другой сессии, где терминал/сессия не является дочерним процессом оболочки, где переменная среды установлена.

Проверка от другого терминала/сессии на том же хосте:

terminal1:: Обратите внимание, что printenv является fork'd и является дочерним процессом удара, и следовательно он читает, его собственные окружают файл.

[centos@centos t]$ echo $$
2610
[centos@centos t]$ export SPIDEY=NIKHIL
[centos@centos t]$ printenv | grep SPIDEY
SPIDEY=NIKHIL
[centos@centos t]$ 

terminal2: на том же хосте - не запускают его с в той же оболочке, где вышеупомянутая переменная была установлена, запустите терминал отдельно.

[centos@centos ~]$ echo $$
4436
[centos@centos ~]$ xargs --null --max-args=1 echo < /proc/self/environ | grep -i spidey
[centos@centos ~]$ strings -f /proc/2610/environ | grep -i spidey
[centos@centos ~]$ xargs --null --max-args=1 echo < /proc/2610/environ | grep -i spidey
[centos@centos ~]$ 
13
14.12.2012, 10:26
2 ответа

tr может сделать это:

tr -d \" < infile > outfile

Вы могли также использовать sed:

sed 's/"//g' < infile > outfile
21
27.01.2020, 19:52
  • 1
    Почему сделал Вас удаленный < infile > outfile? По моему скромному мнению, это было более информативно. –  Ivan 14.12.2012, 11:27
  • 2
    @Ivan я думал, что это было, вероятно, неявно вообще-то, если задуматься. –  Chris Down 14.12.2012, 11:29
  • 3
    Только, когда для опытных пользователей командной строки. Даже при том, что я используемого < прежде пару раз (для импорта сценариев SQL в MySQL и SQLite) было бы сразу очевидно для меня, что я должен использовать < в этом случае. Я думаю, что было бы лучше возвратить полный пример командной строки назад для дальнейшей ссылки тех, кому, возможно, понадобится он. –  Ivan 14.12.2012, 11:35
  • 4
    @Ivan и @Chris, я вернулся он назад (ожидающий обзор) для включения < infile > outfile, надежда это в порядке. –  donothingsuccessfully 14.12.2012, 13:22
  • 5
    Спасибо, @donothingsuccessfully. Я полностью ввел предыдущий комментарий с опечаткой, это - жалость, я не могу отредактировать его %-] –  Ivan 14.12.2012, 15:14

Другая версия команды sed :

sed -i s/\"//g file.txt
  • sedс поток ред итор

    • -ii n -поместить (отредактировать файл на место)
    • sкоманду с заменить
    • /replacement_from_reg_exp/replacement_to_text/заявление
    • \"кавычки, которым предшествует обратная косая черта(замена _из _reg _exp)
    • пустая строка между разделителями косой черты(замена _на _текст)
    • gg lobal (для замены всех вхождений в строке)
  • file.txtимя файла

5
27.01.2020, 19:52

Теги

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