Скопируйте определенный текст с нескольких, выравнивают файл и вставляют его в другом файле автоматически с помощью терминала

мой вопрос расценивает обработку текста:

В списке у меня есть IP-адреса и имена компьютеров в следующем формате:

IP address: 192.168.1.25
Computer name: computer7office
IP address: 192.168.1.69
Computer name: computer22office
IP address: 192.168.1.44
Computer name: computer12personal

Вывод мне нужно:

This computer ip address is xxx.xxx.x.xx and is under the name zzzzzzzzzz

Как я могу автоматически скопировать дюйм/с и имена от списка до выходного файла с помощью командной строки? Вы могли объяснить свою команду, потому что жаль, когда я имею к скопировать/вставить вещам, которые я не понимаю.

4
задан 18 December 2016 в 19:40

2 ответа

В sed, принятие Вашего списка находится в названном файле file, Вы могли использовать:

sed -n '/ss: /N;s/\n//;s/IP address:/This computer ip address is/;s/Computer name:/ and is under the name/p' file
  • -n ничего не печатайте, пока мы не попросим его
  • /ss: / найдите шаблон ss: (для соответствия строкам IP address:)
  • N считайте следующую строку также, таким образом, мы можем присоединиться к ним
  • ; разделяет команды, как в оболочке
  • s/old/new/ замена old с new
  • s/\n// удалите новую строку между этими двумя строками
  • p распечатайте строки, мы продолжили работать

Когда Вы видите то, что Вы хотите, повторите добавление команды > newfile в конце его для записи измененного файла в newfile

Больше четко:

sed -n '{
    /ss: /N
    s/\n//
    s/IP address:/This computer ip address is/
    s/Computer name:/ and is under the name/p
}' file | tee newfile

(tee услужливо записи к newfile и отображает вывод одновременно),

6
ответ дан 23 November 2019 в 11:41

Существует, вероятно, дюжина способов сделать это, с помощью различных относящихся к обработке текстов утилит (awk, perl) и/или потоковые редакторы (sed, ed)

Один путь был бы к cut список в разделителях двоеточия (-d:), сохраняя только второе поле (-f2), и затем используйте xargs передать пар строк (-l2) как аргументы printf:

$ cut -d: -f2 list.txt | xargs -l2 printf 'This computer ip address is %s and is under the name %s\n'
This computer ip address is 192.168.1.25 and is under the name computer7office
This computer ip address is 192.168.1.69 and is under the name computer22office
This computer ip address is 192.168.1.44 and is under the name computer12personal
6
ответ дан 23 November 2019 в 11:41

Другие вопросы по тегам:

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