мой вопрос расценивает обработку текста:
В списке у меня есть 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
Как я могу автоматически скопировать дюйм/с и имена от списка до выходного файла с помощью командной строки? Вы могли объяснить свою команду, потому что жаль, когда я имею к скопировать/вставить вещам, которые я не понимаю.
В 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
и отображает вывод одновременно),
Существует, вероятно, дюжина способов сделать это, с помощью различных относящихся к обработке текстов утилит (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