linux 下批替换字符串和更改文件名
1,替换所有符合条件的字符串sed -i "s/原字符串/新字符串/g" `grep 原字符串 目录/ -rl`比如命令:sed -i "s/oldstring/newstring/g" `grep oldstring test/ -rl`1.2 替换指定文件的字符串sed -i 's/原字符串/新字符串/g' `find . -name 符合条件的文件`1.3 带变量的替...
1,替换所有符合条件的字符串
sed -i "s/原字符串/新字符串/g" `grep 原字符串 目录/ -rl`
比如命令:
sed -i "s/oldstring/newstring/g" `grep oldstring test/ -rl`
1.2 替换指定文件的字符串
sed -i 's/原字符串/新字符串/g' `find . -name 符合条件的文件`
1.3 带变量的替换方法(必须使用双引号,并且变量里的“”无法替换进去,并且替换的字符串不能存在“/”,转移也不行):
COMPILER_TOOLS="mipsel-mt-linux-gnu"
sed -i "s/COMPILER_SET/${COMPILER_TOOLS}/g" test.make
1.4 带变量的替换方法,查找到含有“OUT_RELEASE =的一行,并且用bin/Release替换${LIB_LOCAL_PATH},这种方式允许有“/”的存在”
sed -i "/OUT_RELEASE =/ s|bin/Release|${LIB_LOCAL_PATH}|g" `find . -name "*.mak"`
1.5 find 与grep 结合查找
find . -name *.h |xargs grep "#include" -rh
1.6 替换符合条件的字符串:
sed -i '/OUT_RELEASE =/ s|my_lib/libbase.a|she_lib/libbase.a|g' ${mkfile}
1.7 删除符合条件的字符串:
sed -i '/before=/d' `find . -name "*.cbp"`
2,批量更改文件名:
rename $1 $2 $3
$1: 要被取代的关键字
$2: 新的关键字
$3: 档名符合这个规则的才取代
rename 原字符 新字符 *原字符*
rename oldstring newstring *oldstring*
批量更改符合条件的文件名: rename oldstring newstring `find . -name "*oldstring*"`
2.1 脚本fangsh
#!/bin/sh
for shname in `find 目录/ -name "*oldstring*"`
do
newname=`echo ${shname//oldstring/newstring}`
echo "rename [${shname}]--->[${newname}]"
mv ${shname} ${newname}
done
脚本查找复制文件方法
###################
#!/bin/bash
OLD_NAME=$1
NEW_NAME=$2
find . -name ${OLD_NAME} >file.record
SRC_FILE=`cat file.record`
if [ -f ${SRC_FILE} ];then
cp -f ${SRC_FILE} file.back
echo "backup file ${SRC_FILE}"
fi
sed -i "s/${OLD_NAME}/${NEW_NAME}/" file.record
DES_FILE=`cat file.record`
if [ -f file.back ];then
mv -f file.back ${DES_FILE}
echo "cp to ${DES_FILE}"
fi
OLD_NAME=$1
NEW_NAME=$2
SRC_FILE=$(find . -name ${OLD_NAME})
DIR_PATH=$(dirname ${SRC_FILE})
if [ -f ${SRC_FILE} ];then
cp -f ${SRC_FILE} ${DIR_PATH}/${NEW_NAME}
fi
3.管道符和xargs的区别;
echo "I an gchen" | cat
I an gchen
echo "I an gchen" | xargs cat
cat: I: No such file or directory
cat: an: No such file or directory
cat: gchen: No such file or directory
从上面运行结果可以看出管道符“|”是实现“将前面的标准输出作为后面的标准输入(管道为设备文件,可以访问)”
xargs是实现“将标准输入作为命令的参数”;
更多推荐
所有评论(0)