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是实现“将标准输入作为命令的参数”;

 

 

 

 

Logo

更多推荐