簡體   English   中英

使用 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 的 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM