Использование команды sed для изменения строки в определенной строке на определенную строку

Когда вы используете open() для открытия файла (см. man 2 open), вы получаете для него файловый дескриптор (это int в C). Стандартные потоки связаны с дескрипторами 0, 1 и 2, а любой другой поток открытых файлов будет иметь отдельный связанный с ним дескриптор.

Существует ограничение на количество файлов, которые вы можете открыть одновременно, обычно где-то около 512 или 1024 (см. ulimit -Hn для жесткого верхнего предела), и каждый из этих открытых файлов будет иметь файловый дескриптор, связанный с ними.

Концептуально это просто индекс в массиве, поддерживаемом ядром. Помимо трех стандартных, нет фиксированной связи между файловыми дескрипторами и любым другим потоком.


В журнале, который вы добавили к вопросу, вы видите, что «отрицательные файловые дескрипторы» связаны с кодами ошибок (ENOENT и EACCESS). Системный вызов open() возвращает отрицательные числа для ошибок.

Описание этих кодов ошибок см. в man errno.

Файловые дескрипторы предназначены для каждого процесса, поэтому файловый дескриптор 6 в процессе A не является тем же потоком, что и файловый дескриптор 6 в процессе B.

1
17.11.2018, 02:34
3 ответа

Один способ:

sed -e '4 {
  /test/s/abc/zz/g
}' <file
2
28.01.2020, 02:12

puedes usar esto

sed -i '4s/old_text/new_text/g' file_name
-1
28.01.2020, 02:12

Я не уверен, но будет ли что-то подобное работать?

awk 'NR==4 {print $0}' filename.txt | grep 'test' | sed 's/abc/xyz/g'
0
28.01.2020, 02:12

Теги

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