ed(1) скрипт с множественным поиском/заменой

В каталоге /procвы также можете найти адреса IPv4 в таблице Forwarding Information Base, в/proc/net/fib_trie

Таблица довольно понятна, если сделать просто cat, сначала идет Main:, а затемLocal:

cat /proc/net/fib_trie

или чтобы увидеть вашу сеть, IP-адреса и сетевую маску:

cat /proc/net/fib_trie | grep "|--"   | egrep -v "0.0.0.0| 127."
       |-- 193.136.1.0
       |-- 193.136.1.2
    |-- 193.136.1.255
       |-- 193.136.1.0
       |-- 193.136.1.2
    |-- 193.136.1.255       
1
14.08.2019, 20:40
1 ответ

Вы можете сделать это, но вы не можете отправлять команды через перенаправление или обычный файл.

Из онлайн-руководства GNU ed:

When an error occurs, if ed's input is from a regular file or here document, then it exits, otherwise it prints a '?' and returns to command mode.

Одна из двух команд завершится ошибкой, так как слово в файле не может соответствовать обоим шаблонам, поэтому edзавершает работу --либо в строке 1, потому что оно не соответствует, либо в строке 2, потому что это не соответствует (и поэтому выход до сохранения измененного файла ).

Команды будут работать (минус обратная косая черта и суффиксы )через стандартный ввод:

printf '%s\n' 's/heads/1/' 's/tails/-1/' 'wq' | ed -s coin.txt

Вы получите ?в stderr, потому что s/heads/1/не удалось (, который вы могли бы перенаправить ), но все замены происходят, как и ожидалось.

Обратите внимание, что я удалил завершающую команду ., так как команды qдостаточно для выхода из ed.


Обходной путь, опубликованный ed (1 )Conference в Twitter ,:

g/heads/s//1/
g/tails/s//-1/
wq

или без сокращений в части s///:

g/heads/s/heads/1/
g/tails/s/tails/-1/
wq

Эти варианты работают, потому что команды gне завершатся ошибкой, даже если замены не выполняются.

2
27.01.2020, 23:22

Теги

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