使用sed进行字符截取等简单应用
针对文件字符串替换
#!/bin/bash
function re_bb() {
echo $1
sed -i '1,11d' $1 ##删除指定行
sed -i '1i\# ###################################' $1
sed -i '2i\\' $1 ##增加空白行
sed -i 's/LICENSE = "CLOSED"/LICENSE = "GPL-2.0-or-later"/g' $1 ##替换指定内容
}
#筛选符合条件的目标进行操作
num=`grep -c "CLOSED" $1` ##当$1中存在"CLOSED"时 num != 0
if [[ $num -ne '0' ]];then
re_bb $1
fi
#re_bb $1
针对文件字符串替换
该函数主要针对从文件中取得字符格式的路径,假如路径中存在变量解应用还需要进行字符串替换(较为麻烦)。
#/bin/bash
function move_lic() {
USE_DIR=`sed -n '2p' $1 | cut -b 15-` ##取传入参数的第二行的从第15个字符后的其余字符
USE_DIR=`echo $USE_DIR | sed 's/\"//g'` ##去掉冒号
USE_DIR=`echo $USE_DIR | sed 's?\${XXX_A}?A?g'`
USE_DIR=`echo $USE_DIR | sed 's?\${XXX_B}?B?g'`
echo $USE_DIR
cp file1.txt $USE_DIR -fp ##赋值txt文件到$USE_DIR指定的路径
}
move_lic $1
获取文件中某关键字的首行行数
num=`cat $USE_DIR_DIR | grep -n xxx | awk -F ":" '{print $1}'`
echo $num
num=`expr $num + 1` ##shell加法
获取脚本执行路径
script_path=$(realpath `dirname ${BASH_SOURCE[0]}`)
DIR=$(realpath ${script_path}/..)
针对多个目标使用脚本/命令
find -name "*.txt" | xargs -n 1 ./add_lic.sh
#xargs -n 1 指每次传一个参数给add_lic.sh,这里必须要加./执行脚本 不能直接写脚本名字
再特定关键词下新增行
sed -i '/aaaaa/a\bbbbbbbbbbbb' $TAR_DIR
note
$1 在脚本函数中代表传入函数的变量,在脚本内部定义;而在外部使用这个脚本时,外部的$1指的是传参给该脚本的参数,二者并不相同。