linux 如何使用sed命令替换文件中的链接

xkftehaa  于 2022-11-02  发布在  Linux
关注(0)|答案(4)|浏览(473)

我有一个名为1.txt的文件,它包含以下3个网址,每个网址都有一个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
olqngx59

olqngx591#

像这样的东西?

$ 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的新行。

o2gm4chl

o2gm4chl2#

使用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
3pvhb19x

3pvhb19x3#

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

使用sub的替代awk解决方案:

awk '{sub(/\/\/.+/, "//abc/" ++n ".png")} 1' file

  URL1: https://abc/1.png
  URL2: https://abc/2.png
  URL3: https://abc/3.png
4c8rllxm

4c8rllxm4#

这里有一个简单的 Package 器,它可以将命令行参数转换成一个合适的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"

相关问题