$ printf '4m1\n,p\n' | ed -s file
line 1
line 4
line 2
line 3
Короткий ed
сценарий
4m1
,p
переместит четвертую строку после первой, а затем отобразит содержимое буфера редактирования в терминале.
Чтобы сохранить результат в новый файл,вы можете использовать перенаправление, например
printf '4m1\n,p\n' | ed -s file >newfile
или вы можете указать ed
сохранить файл с помощью
printf '4m1\nw newfile\n' | ed -s file
Команда w newfile
сохранит отредактированный буфер в указанный файл. Команда w
без имени файла сохранит файл с исходным именем.
Поскольку построчный редактор ed
считывает файл в память, его можно использовать для подобных целей, если файл имеет разумный, но не слишком большой размер (меньше гигабайт ).
Чтобы переместить последнюю строку, измените 4
на $
в приведенных выше командах.
Похоже, macvlan не работает через Wi-Fi, подробности см. в https://unix.stackexchange.com/a/555676. Можно заставить его работать как через Wi-Fi, так и через Ethernet, используя тип ipvlan mode l2 вместо тип macvlan .
Вот моя полная настройка, которая создает 3 IP-адреса, каждый в своем собственном сетевом пространстве имен:
sudo ip link del hostnet ||:
sudo ip link add hostnet link wlp2s0 type ipvlan mode l2
sudo ip addr add 192.168.0.90/32 brd + dev hostnet
sudo ip link set hostnet up # `ip route add' below needs it.
for I in 91 92 93; do
sudo ip netns del net"$I" && sleep.5 ||:
sudo ip netns add net"$I"
sudo ip netns exec net$I ip link set lo up
sudo ip link add link wlp2s0 name net"$I"in type ipvlan mode l2
sudo ip link set net"$I"in netns net"$I"
sudo ip netns exec net"$I" ip addr add 192.168.0."$I"/24 brd + dev net"$I"in
sudo ip netns exec net"$I" ip link set net"$I"in up
sudo ip netns exec net"$I" ip route add default via 192.168.0.1
sudo ip route add 192.168.0."$I"/32 dev hostnet
done
Это делает, например,. ping 192.168.0.91
, ping 192.168.0.92
, ping 192.168.0.93
, ping 192.168.0.130
и ping 192.168.0.12
работают во всех 5 участниках :пространство имен корневой сети хоста (IP-адрес 192.168.0.130 ), каждый 3 :хост net"$I"
сетевое пространство имен (IP-адрес 192.168.0.91 и т. д. ), другие узлы в локальной сети (IP-адрес, например 192.168.0.12 ).
Это также позволяет TCP-соединениям и UDP-пакетам работать в любом направлении между любым из 5 участников.
Это также обеспечивает работу UDP-трансляций между любым из 5 участников. Это установлено пунктами brd +
выше. Хотя, похоже, этот пункт не нужен, потому что вещание включено по умолчанию.
TCP-подключения имеют правильный IP-адрес, за исключением того, что для TCP-подключений из корневого сетевого пространства имен узла к сетевому пространству имен узла net"$I"
отображается входящий IP-адрес 192.168.0.90 вместо 192.168.0.130.
Сетевое пространство имен хоста net"$I"
может подключаться к корневому сетевому пространству имен хоста, используя либо IP-адрес 192.168.0.90, либо 192.168.0.130.