Shell脚本用于修改同一目录中多个文件的文件名的变量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell脚本用于修改同一目录中多个文件的文件名的变量相关的知识,希望对你有一定的参考价值。

我在目录中有多个文件,例如:

a01.txt
a02.txt
a03.txt 
etc...

目录中所有文本文件的第3行如下:

consumer[location].userid= constant

我想用每个文件的第三行中没有扩展名的相应文件名替换单词“location”,例如:as

consumer[a01].userid= constant    --------- for a01.txt
consumer[a02].userid= constant    --------- for a03.txt
etc

你能帮忙吗?

答案

因此,从顶部开始:您想要替换文件的特定行中的单词(位置)。谷歌说,sed可以这样做:

sed -i "3s/location/foo/" file.ext

将取代文件“file.ext”第三行中第一次出现的“location”

要替换位置的字符串应该是没有扩展名的文件名。既然您知道扩展名,那么basename应该可以正常工作:

basename /path/to/file.ext .ext

将返回“文件”。

现在循环遍历目录中的所有txt文件:

for filename in directory/*.txt; do
# Do stuff
done

组合这些命令会产生如下的短脚本:

#!/bin/bash
# Assumes the script is located in the data directory
for filename in ./*.txt; do
    name=$(basename $filename .txt)
    echo "$filename -> $name"
    sed -i "3s/location/$name/" $filename
done

以上是关于Shell脚本用于修改同一目录中多个文件的文件名的变量的主要内容,如果未能解决你的问题,请参考以下文章

利用shell脚本或者php移动某个文件夹下的文件到各自的日期组成的目录下

shell脚本如何判断目录下的多个文件夹是不是为空

Shell实例----------从文件夹里面多个文件里面查找指定内容

如何将shell脚本中定义的变量用于Scala文件? [重复]

shell批量执行同一目录不同文件夹里面的东西

用于在远程系统上归档文件的 Unix shell 脚本