我对某些命令行实用程序非常陌生,并且一直在寻找能够实现我的目标的命令。
目标是查找包含文本字符串的文件,将其替换为新字符串,然后将结果写入名称与原始文件相同但位于不同目录中的文件。
显然这不起作用,所以我问你是怎么知道这些东西会发生的。
grep -rl 'stringToFind' *.* | sed 's|oldString|newString|g' < fileNameFromGrep > ./new/fileNameFromGrep
感谢您的投入! 约翰
答案 0 :(得分:2)
for f in "`find /YOUR/SEARCH/DIR/ROOT -type f -exec fgrep -l 'stirngToFind' \{\} \;`" ; do
sed 's|oldString|newString|g' < "${f} > ./new/"${f}
done
会为你做的。
如果文件名中有空格:
OLDIFS=$IFS
IFS=''
find /PATH -print0 -type f | while read -r -d $'' file
do
fgrep -l 'stirngToFind' "$file" && \
sed 's|oldString|newString|g' < "${file} > ./new/"${file}
done
IFS=$OLDIFS
答案 1 :(得分:1)
#!/bin/bash
for file in *; do
if grep -qF 'stringToFind' "$file"; then
sed 's/oldString/newString/g' "$file" > "./new/$file"
fi
done
答案 2 :(得分:0)
for file in path/to/dir/*
do
grep -q 'pattern' "$file" > /dev/null
if [ $? == 0 ]; then
sed 's/oldString/newString/g' "$file" > /path/to/newdir/"$file"
fi
done
答案 3 :(得分:0)
你试试:
sed -ie "s/oldString/newString/g" \
$(grep -Rsi 'pattern' path/to/dir/ | cut -d: -f1)