Linux批量修改txt文档内容或加前缀
记录一个科研中遇到的问题吧,就是要批量修改 txt 文档中的内容。因为数据集的路径可能设置的不太相同。
问题是:
- 在一个文件加下有很多的 txt 文件。
- 这些文件中的内容是
art_painting/dog/pic_005.jpg 1
art_painting/dog/pic_032.jpg 1
art_painting/dog/pic_037.jpg 1
art_painting/dog/pic_042.jpg 1
art_painting/dog/pic_066.jpg 1
art_painting/dog/pic_073.jpg 1
art_painting/dog/pic_089.jpg 1
art_painting/dog/pic_090.jpg 1
art_painting/dog/pic_097.jpg 1
art_painting/dog/pic_100.jpg 1
- 我想给 所有这些 txt 文件的内容都加上路径前缀
/data1/zcl/code/OOD/dataset/PACS/
- 也就是 txt 的文件内容更改为:
/data1/zcl/code/OOD/dataset/PACS/art_painting/dog/pic_005.jpg 1
/data1/zcl/code/OOD/dataset/PACS/art_painting/dog/pic_032.jpg 1
解决方案:
进入包含很多个 txt 的那个文件夹下,然后使用 linux 命令
for i in *.txt; do sed -i -e 's/^/\/data1\/zcl\/code\/OOD\/dataset\/PACS\//' $i; done
附加操作(内容替换):
- 需要将文件中下面内容:
/home/fmc/data/PACS/kfold/art_painting/dog/pic_001.jpg 0
/home/fmc/data/PACS/kfold/art_painting/dog/pic_002.jpg 0
/home/fmc/data/PACS/kfold/art_painting/dog/pic_003.jpg 0
替换为
/home/user/data/images/PACS/kfold/art_painting/dog/pic_001.jpg 0
/home/user/data/images/PACS/kfold/art_painting/dog/pic_002.jpg 0
/home/user/data/images/PACS/kfold/art_painting/dog/pic_003.jpg 0
- 用的命令是
for i in *.txt; do sed -i "s@/home/fmc/data/@/home/user/data/images/@g" $i; done
Tips:可以先创建一个文件夹然后创建两个实例性的 txt 文件做个实验,再完成相应的更改。