[英]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 的 IP。
例子:
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
我的回報是 /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
這可以在awk
中輕松完成,請嘗試以下awk
程序。 使用顯示的示例編寫和測試。
awk '!/\/32$/{$0=$0"/32"} 1' Input_file
解釋:簡單的解釋是,如果行不以/32
結尾則檢查條件,然后將/32
添加到當前行並提及1
將打印已編輯/未編輯的當前行。
使用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
您可以將/32
添加到不包含/
的行的末尾
sed '\,/,!s,$,/32,' list.log > newlist.log
詳情:
\,/,!
- 查找不包含/
的行s,$,/32,
- 並用/32
替換字符串 position 的結尾。請參閱在線演示:
#!/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"
Output:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.