Чтобы дать дополнительный ответ на ваш второй вопрос, :Запуск iptables -L -n
вернет IP-адреса и порты в числовом формате, а не преобразовывает их в имена хостов и имена служб. Таким образом, dpt:domain
и dpt:bootps
будут напечатаны как dpt:53
и dpt:67
. Это относится к каждому хосту/порту, за которым вы не знаете имя службы.
Вы можете использовать вариант 39. Добавить строку к следующей, если она заканчивается обратной косой чертой "\" из Sed One -Объяснение вкладышей, часть I :Файл Интервалы, нумерация, преобразование и замена текста
Вместо объединения, когда предыдущая строка заканчивается на \
, вы хотите сделать это, когда она не заканчивается на |
. Так дано
$ cat -A file.psv
"abc"|"def"|12/28/2019|"hello world"|$
"abc"|"def"|12/28/2019|"Nice$
weather"|$
, затем
$ sed -e :a -e '/|$/!N; s/\n//; ta' file.psv | cat -A
"abc"|"def"|12/28/2019|"hello world"|$
"abc"|"def"|12/28/2019|"Niceweather"|$
Если ваш файл имеет окончания строк CRLF в стиле DOS -, т.е.
$ cat -A file.psv
"abc"|"def"|12/28/2019|"hello world"|^M$
"abc"|"def"|12/28/2019|"Nice^M$
weather"|^M$
, то вы можете принять это во внимание, изменив команду на
sed -e :a -e '/|\r$/!N; s/\r\n//; ta' file.psv
Чтобы отредактировать файл на месте, добавьте-i
(или -i.bak
, например, для сохранения резервной копии ). Чтобы также преобразовать файл в окончания строк Unix, добавьте-e 's/\r$//'
sed -i.bak -e :a -e '/|\r$/!N; s/\r\n//; ta' -e 's/\r$//' file.psv