gpt4 book ai didi

regex - 如何用 'sed' 或 'awk' 替换每行中第二次出现的空格?

转载 作者:行者123 更新时间:2023-12-05 09:05:06 25 4
gpt4 key购买 nike

我有一个文件 hashes,其中有很多行如下所示:

wget https://ipfs.io/ipfs/QmbKi6XiMmf4YfvKXhqVPymD1HDwJ3WqukjyLuEvnrZrCz The_Supremes_-_My_World_Is_Empty_Without_You_(lyrics).mkv

hashes 中的所有行都将遵循以下模式:

wget https://ipfs.io/ipfs/hashthatis46characterlong nameOfAfileWithoutSpaces

因为它们是由我的脚本使用以下代码行编写的:

find ~/pCloudDrive/VisualArts/Films/Fiction_Movies -maxdepth 1 -type f -size +200M -exec ipfs add --nocopy {} \;>>~/CS/ipfs/hashes && \
sed -i 's;added ;wget https://ipfs.io/ipfs/;g' ~/CS/ipfs/hashes

所有哈希值都是 46 个字符长,通常是 start with 'Qm' but this may not necessarily bethe case in the future.

我想用“-O”替换这个文件每一行的第二个空格,这样它看起来像:

wget https://ipfs.io/ipfs/hashthatis46characterlong -O nameOfAfileWithoutSpaces

我尝试了 sed 's/[0-9A-z]{46,46}\s/& -O/g' hashes 但无济于事 - 我得到以下输出:

sed: -e expression #1, char 27: Invalid range end

我该怎么做?对于这个问题,awk 会比 sed 提供更好的解决方案吗?

最佳答案

使用 GNU awk 和 gensub() 更改每条记录上的第二次出现:

$ awk '{print gensub(/ /," -O ","2")}' file

例如:

$ echo 1 2 3 4 5  | awk '{print gensub(/ /," -O ","2")}'
1 2 -O 3 4 5

关于regex - 如何用 'sed' 或 'awk' 替换每行中第二次出现的空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67716017/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com