使用 sed 替换行
Replace in line using sed
我正在创建一个 shell 脚本,它读取以下 list.log
1.15.2.119
1.15.86.33
1.15.251.60
1.20.178.145/31
1.37.33.24
1.54.202.216
1.58.10.126/28
1.80.225.84
1.116.240.174/30
我想在所有 IP 的末尾添加一个 /32 IP,除了那些已经存在的 /32 东西。
示例:
1.14.191.227/32
1.15.2.119/32
1.15.86.33/32
1.15.251.60/32
1.20.178.145/31
1.37.33.24/32
1.54.202.216/32
1.58.10.126/28
1.80.225.84/32
1.116.240.174/30
我的 return 是 /32
的两倍
cat list.log | sed 's/$/\/32/'
1.14.191.227/32
1.15.2.119/32
1.15.86.33/32
1.15.251.60/32
1.20.178.145/31/32
1.37.33.24/32
1.54.202.216/32
1.58.10.126/28/32
1.80.225.84/32
1.116.240.174/30/32
您可以在不包含 /
的行末添加 /32
sed '\,/,!s,$,/32,' list.log > newlist.log
详情:
\,/,!
- 查找不包含 /
的行
s,$,/32,
- 并用 /32
替换字符串位置的结尾。
参见 online demo:
#!/bin/bash
s='1.15.2.119
1.15.86.33
1.15.251.60
1.20.178.145/31
1.37.33.24
1.54.202.216
1.58.10.126/28
1.80.225.84
1.116.240.174/30'
sed '\,/,!s,$,/32,' <<< "$s"
输出:
1.15.2.119/32
1.15.86.33/32
1.15.251.60/32
1.20.178.145/31
1.37.33.24/32
1.54.202.216/32
1.58.10.126/28
1.80.225.84/32
1.116.240.174/30
这可以在 awk
中轻松完成,请尝试遵循 awk
程序。使用显示的示例编写和测试。
awk '!/\/32$/{[=10=]=[=10=]"/32"} 1' Input_file
解释: 简单的解释是,如果行不以 /32
结尾则检查条件,然后添加 /32
到当前行并提及 1
将打印 edited/non-edited 当前行。
使用sed
$ sed 's|\.[0-9]\+$|&/32|' list.log
1.15.2.119/32
1.15.86.33/32
1.15.251.60/32
1.20.178.145/31
1.37.33.24/32
1.54.202.216/32
1.58.10.126/28
1.80.225.84/32
1.116.240.174/30
我正在创建一个 shell 脚本,它读取以下 list.log
1.15.2.119
1.15.86.33
1.15.251.60
1.20.178.145/31
1.37.33.24
1.54.202.216
1.58.10.126/28
1.80.225.84
1.116.240.174/30
我想在所有 IP 的末尾添加一个 /32 IP,除了那些已经存在的 /32 东西。
示例:
1.14.191.227/32
1.15.2.119/32
1.15.86.33/32
1.15.251.60/32
1.20.178.145/31
1.37.33.24/32
1.54.202.216/32
1.58.10.126/28
1.80.225.84/32
1.116.240.174/30
我的 return 是 /32
的两倍cat list.log | sed 's/$/\/32/'
1.14.191.227/32
1.15.2.119/32
1.15.86.33/32
1.15.251.60/32
1.20.178.145/31/32
1.37.33.24/32
1.54.202.216/32
1.58.10.126/28/32
1.80.225.84/32
1.116.240.174/30/32
您可以在不包含 /
/32
sed '\,/,!s,$,/32,' list.log > newlist.log
详情:
\,/,!
- 查找不包含/
的行
s,$,/32,
- 并用/32
替换字符串位置的结尾。
参见 online demo:
#!/bin/bash
s='1.15.2.119
1.15.86.33
1.15.251.60
1.20.178.145/31
1.37.33.24
1.54.202.216
1.58.10.126/28
1.80.225.84
1.116.240.174/30'
sed '\,/,!s,$,/32,' <<< "$s"
输出:
1.15.2.119/32
1.15.86.33/32
1.15.251.60/32
1.20.178.145/31
1.37.33.24/32
1.54.202.216/32
1.58.10.126/28
1.80.225.84/32
1.116.240.174/30
这可以在 awk
中轻松完成,请尝试遵循 awk
程序。使用显示的示例编写和测试。
awk '!/\/32$/{[=10=]=[=10=]"/32"} 1' Input_file
解释: 简单的解释是,如果行不以 /32
结尾则检查条件,然后添加 /32
到当前行并提及 1
将打印 edited/non-edited 当前行。
使用sed
$ sed 's|\.[0-9]\+$|&/32|' list.log
1.15.2.119/32
1.15.86.33/32
1.15.251.60/32
1.20.178.145/31
1.37.33.24/32
1.54.202.216/32
1.58.10.126/28
1.80.225.84/32
1.116.240.174/30