将grep与sed一起使用,并根据结果编写新文件
我对一些命令行实用程序非常陌生,一直在寻找一个可以实现我目标的命令 目标是找到包含文本字符串的文件,用新字符串替换它,然后将结果写入与原始文件名相同但位于不同目录中的文件 显然,这是行不通的,所以我想问你们知道这件事的人会怎么做将grep与sed一起使用,并根据结果编写新文件,sed,grep,xargs,Sed,Grep,Xargs,我对一些命令行实用程序非常陌生,一直在寻找一个可以实现我目标的命令 目标是找到包含文本字符串的文件,用新字符串替换它,然后将结果写入与原始文件名相同但位于不同目录中的文件 显然,这是行不通的,所以我想问你们知道这件事的人会怎么做 grep -rl 'stringToFind' *.* | sed 's|oldString|newString|g' < fileNameFromGrep > ./new/fileNameFromGrep grep-rl'stringToFind'*.*
grep -rl 'stringToFind' *.* | sed 's|oldString|newString|g' < fileNameFromGrep > ./new/fileNameFromGrep
grep-rl'stringToFind'*.*sed's | oldString | newString | g'/new/fileNameFromGrep
谢谢你的意见!
John在“`find/YOUR/SEARCH/DIR/ROOT-type f-exec fgrep-l'stirngtofid'\{\\\\;`”中表示f;做
sed的| oldString | newString | g'<“${f}>/new/“${f}”
完成
我会帮你的
如果文件名中有空格:
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
OLDIFS=$IFS
如果=“”
find/PATH-print0-type f | while read-r-d$''文件
做
fgrep-l'stirngtofid''$file'&\
sed的| oldString | newString | g'<“${file}>/new/“${file}”
完成
IFS=$OLDIFS
您可以尝试:
sed -ie "s/oldString/newString/g" \
$(grep -Rsi 'pattern' path/to/dir/ | cut -d: -f1)
sed:
- i到位
- e执行其他命令或脚本
- R递归
- s抑制错误消息
- i忽略区分大小写
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
sed -ie "s/oldString/newString/g" \
$(grep -Rsi 'pattern' path/to/dir/ | cut -d: -f1)