我在目录中有多个文件,例如:
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