Удалить разделитель строк из psv-файла

Чтобы дать дополнительный ответ на ваш второй вопрос, :Запуск iptables -L -nвернет IP-адреса и порты в числовом формате, а не преобразовывает их в имена хостов и имена служб. Таким образом, dpt:domainи dpt:bootpsбудут напечатаны как dpt:53и dpt:67. Это относится к каждому хосту/порту, за которым вы не знаете имя службы.

0
06.11.2019, 20:29
1 ответ

Вы можете использовать вариант 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
1
28.01.2020, 02:39

Теги

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