这个问题与我在stackoverflow中看到的其他问题不同,因为它必须在特殊字符(如]或)中查找字符串,并替换与markdown文本关联的不同文本字符串url。 在其他解决方案中,我发现只有文本替换,无法在循环中找到和替换其他文本。
kubectl describe pods podname -n namespace
还有来自imgur的新图像,来自该变量:
...
![Image 1](https://i.imgur.com/BHoO2Wr.png "Alt Text 1")
...
![Image 2](https://i.imgur.com/qNxviLS.png "Alt Text 2")
...
如何在bash中将旧图像更改为新图像?
更改此项:xY0DgmM为BHoO2Wr
如果我的图像是这样的:
NEW_IMG1="https://i.imgur.com/xY0DgmM.png"
NEW_IMG2="https://i.imgur.com/E98NLTT.png"
如何在bash中更改xY0DgmM的BHoO2Wr和E98NLTT的qNxviLS?
答案 0 :(得分:1)
现在,这看起来像是sed的工作:)
# The file containing your markup
FILE="myMarkdown.txt"
# A list of new URLs, first = [Image 1], second = [Image 2]...
IMG=("https://i.imgur.com/xY0DgmM.png" "https://i.imgur.com/E98NLTT.png")
COUNT=1
for i in "${IMG[@]}"; do
sed -i "s#\[Image $COUNT\](https://i.imgur.com/\(.*\) \(\"Alt Text.*\")\)#\[Image $COUNT\]($i \2#" "$FILE"
COUNT=$((COUNT+1))
done
只需将其另存为脚本,更改两个第一个变量,然后在您喜欢的bash解释器中运行它即可:)
答案 1 :(得分:1)
使用GNU awk将第三个参数匹配():
$ NEW_IMG1="https://i.imgur.com/xY0DgmM.png"
$ NEW_IMG2="https://i.imgur.com/E98NLTT.png"
$ awk -v new="$NEW_IMG1 $NEW_IMG2" '
BEGIN { split(new,images) }
match($0,/^(!\[Image *([0-9]+)]\()[^ ]*(.*)/,a) {
$0=a[1] images[a[2]] a[3]
}
1' file
...
![Image 1](https://i.imgur.com/xY0DgmM.png "Alt Text 1")
...
![Image 2](https://i.imgur.com/E98NLTT.png "Alt Text 2")
...
如果实际上只是按照显示顺序替换图像,而不是用输入文件中的数字([Image 1]
等)替换,那么它将是:
match($0,/^(!\[Image[^]]+]\()[^ ]*(.*)/,a) {
$0=a[1] images[++cnt] a[2]
}
并匹配方括号内的任何文本:
match($0,/^(!\[[^]]+]\()[^ ]*(.*)/,a) {
$0=a[1] images[++cnt] a[2]
}