bash - 如何在包含斜杠的匹配后更改单词
问题描述
在我的文件“input.txt”中,我写了以下路径:
"/home/inputfiles/water_gen/5202_water.gen"
我想通过特定数字(可能使用 for 循环)更改“5202”并将它们保存为不同的文件。
我认为最简单的方法是使用 sed 找到“water_gen/”作为匹配项,然后更改其余部分。
但是有没有更简单的方法?由于斜线,我一直遇到问题。
解决方案
这可能对您有用(GNU sed 和并行):
parallel --dry sed -E 's/[0-9]+/{1}/' {2} \> {2.}{1}.txt ::: {1000..1005} ::: file.txt
这将生成命令集以将第一组数字替换为file.txt
to1000
并将1005
结果写入file1000.txt
to file1005.txt
。
验证命令集后,删除选项的--dry
缩写--dry-run
并重新运行。
注意原始文件没有改变。
替换可以更具体,即:
parallel sed -E \''s#(/home/inputfiles/water_gen/)5202(_water.gen)#\1{1}\2#'\' {2} \> {2.}{1}.txt ::: {1000..1005} ::: file.txt
注意 sed 命令引号被引用\'
,这样后面的引用就不会被误认为是 shell 中的东西。
或者,不太具体:
parallel sed -E \''s#(/home/inputfiles/water_gen/)[0-9]+(_water.gen)#\1{1}\2#'\' {2} \> {2.}{1}.txt ::: {1000..1005} ::: file.txt
替换号码可能在文件中:
cat <<\! > replacementsFile
1000
1001
1002
1003
1004
1005
!
parallel sed -E \''s#(/home/inputfiles/water_gen/)5202(_water.gen)#\1{1}\2#'\' {2} \> {2.}{1}.txt :::: replacementsFile ::: file.txt
推荐阅读
- python - Python 脚本无法访问某些环境变量
- php - PhpStorm 自动完成 STD 对象不起作用
- c - malloc 调用 realloc,然后崩溃
- javascript - 为什么 new Array() 不等于 []?
- python - 在 Python 的 argparse 中设置输出的行长
- c# - 将 Azure Active Directory 用户绑定到 asp.net 应用程序数据库中的现有用户
- c# - 是否可以裁剪视频并将其保存在 Unity 中?
- jmeter - JMetter,加密请求,解密响应
- c++ - 向量向量的语法错误
- c# - 在 C# 中使用 cmd 将文件从一个目录复制到另一个目录