我有一個名為 1.txt 的檔案,它包含以下 3 個 URL,每個 URL 都遵循一個 http 鏈接,我想使用 sed 命令更改它們。鏈接可以看作是一個沒有空格的字串。
URL1: https://i.stack.imgur.com/Zw5ZK.png
URL2: https://i.stack.imgur.com/cT8Pv.png
URL3: https://i.stack.imgur.com/L3Syn.png
我的目的是使用類似下面的內容從命令列替換這 3 個鏈接,例如:
sed **** 1.txt https://abc/1.png https://abc/2.png https://abc/3.png
命令執行后,1.txt 的新內容為:
URL1: https://abc/1.png
URL2: https://abc/2.png
URL3: https://abc/3.png
uj5u.com熱心網友回復:
像這樣的東西?
$ awk '{a=gensub(/URL([^:] ):/,"\\1",1,$1);sub(/i\.stack\.imgur.com\/.*/,"abc",$2);print $1,$2"/"a".png"}' 1.txt
URL1: https://abc/1.png
URL2: https://abc/2.png
URL3: https://abc/3.png
a=gensub(/URL([^:] ):/,"\\1",1,$1)捕獲第一列中 URL 的數字部分。
用第二列中sub(/i\.stack\.imgur.com\/.*/,"abc",$2)的整個實際 url 替換。https://abc
print $1,$2"/"a".png"使用新的編號 png 列印新行。
uj5u.com熱心網友回復:
使用sed
$ sed -E 's~(URL([0-9]):[^:]*://).*~\1abc/\2.png~' input_file
URL1: https://abc/1.png
URL2: https://abc/2.png
URL3: https://abc/3.png
uj5u.com熱心網友回復:
使用以下方法要容易得多awk:
awk 'BEGIN {FS=OFS="//"} {$2 = "abc/" n ".png"} 1' file
URL1: https://abc/1.png
URL2: https://abc/2.png
URL3: https://abc/3.png
使用替代awk解決方案sub:
awk '{sub(/\/\/. /, "//abc/" n ".png")} 1' file
URL1: https://abc/1.png
URL2: https://abc/2.png
URL3: https://abc/3.png
uj5u.com熱心網友回復:
這是一個簡單的包裝器,它將您的命令列引數更改為適當的sed腳本。我們只是按行號索引。
#!/bin/bash
file=$1
shift
script=() # empty array
for ((i=1; i<=$#; i )); do
script =(-e "${i}s|http.*|${!i}|")
done
sed "${script[@]}" "$file"
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/524982.html
標籤:linuxsed
