如何用sed将指定路径替换为等长度的X字符序列?
替换指定路径为等长X字符的解决方案
单个GNU sed命令实现(推荐)
如果你的系统使用GNU sed(绝大多数Linux发行版默认),可以直接用带e执行标志的sed命令,动态生成与目标路径长度一致的X序列:
sed -E 's|/a/given/path|$(printf "%0.sX" $(seq 1 ${#\0}))|e' your_file.txt
命令说明:
-E:启用扩展正则表达式,简化语法s|pattern|replacement|e:e标志会将替换部分的内容作为Shell命令执行,用执行结果替换匹配到的路径${#\0}:获取匹配到的路径(\0代表整个匹配内容)的字符长度printf "%0.sX" $(seq 1 N):生成N个连续的X字符,N为路径长度
如果需要批量处理多个文件,直接把文件名依次放在命令末尾即可:
sed -E 's|/a/given/path|$(printf "%0.sX" $(seq 1 ${#\0}))|e' file1.txt file2.txt file3.txt
兼容BSD sed的脚本方案(适用于macOS等)
如果是BSD sed(无e执行标志),可以用Bash脚本预先生成等长X序列,再调用sed替换:
#!/bin/bash TARGET_PATH="/a/given/path" # 生成与目标路径长度相同的X字符串 X_STRING=$(printf "%0.sX" $(seq 1 ${#TARGET_PATH})) # 替换所有传入的文件 sed "s|$TARGET_PATH|$X_STRING|g" "$@"
使用方法:
- 将脚本保存为
replace_path.sh - 赋予执行权限:
chmod +x replace_path.sh - 批量处理文件:
./replace_path.sh file1.txt file2.txt
注意事项:
- 因为目标路径在每个文件中仅出现一次,
g替换标志可以省略,保留也不会产生问题 - 随机字符串不含目标路径内容,无需担心误替换
内容的提问来源于stack exchange,提问作者OznOg
相关产品推荐
相关产品推荐

