shell 增删改查-文件操作大全

增删改查 字符串
#sed参数: a 新增; c 替换; d 删除; i 插入; p 打印; s 取代

---------- 新增指定字符位置 ----------

sed -i '/admin/axxxxxxx' passwd

                    # 指定位置的后面增加一行内容为:xxxxxx

                    # passwd 是文件

                    # 使用符号 \  进行转译特殊字符

                    # 网址中的  http://  转译为:  http:/\/\ 

sed -i '/admin/i1111n 2222 n 3333' passwd

                    # 前面增加多行内容

                    # \n 换行

sed -i '$a xxxxn11111n22222' 1.sh

                    # $最后一行,a 插入字符xxxx

                    # \n 换行,插入多行字符

sed -i G 1.txt # 每行后面增加空行

                    # 'G;G' 增加两行空行

echo "

111

333

" >> 1.sh # 使用 echo 直接换行追加字符到文本

sed -i "s/^/https://g" 1.txt

                    # 每行行首增加字符串   ^  符号是行首; $ 符号是行尾

                    # "s/^/xxx/g" 其中s是修改,g是开启特殊字符转译,

                    # 符号  \  指定需要转译  ://  符号不被解析 

sed -i '/./{s/^/eisc/;s/$/eisc/}' 1.txt

                    # 这是一个组合,行首与行尾都需要分别添加

---------- 删除指定字符位置的行 --------

sed -i "/^f/d" txt.t # txt.t中以f开头的一行

                    # 符号 ^ 开头,不加  ^ 为包含有这个字符

                    #  '/^\s*$/d'  删除所有空行

sed -i '/^$/d' test.txt # 删除空行

sed -i 's/[ ]*//g' test.txt # 剔除空格

s/[[:space:]]//g            # 删除所有空格

's/[ \t]*$//g'            # 删除行末空格

A=$(sed -n '$=' 1.sh) ; sed -i $(($A-3+1)),${A}d 1.sh

                    # 删除最后三行

                    # sed -n 显示行号,$ 最后一行行号的数字

                    # $(($A-3+1))  计算开始删除的行号位置

                    # ${A}d 最后一行,删除的结束位置
                    # 删除部分字符:使用下面的修改为空格即可

---------- 修改指定字符 ---------

!/bin/bash

sed -i -e 's/^a.*/'======已修改aaaaa====='/g' \

                    # -e 修改多个, ^ 开头符号(开头为a字符的) .* 后面的所有内容 \ 多行换行

-e 's/^b.*/'======已修改bbbbb====='/g' 3.txt

                    # 要操作的文件为:3.txt

sed -i "s/echo/xxx/g" grep "echo" -rl /root/1.sh

                    #"s/原字符串/新字符串/g" 

                    # `grep "原字符串" -rl 所在目录`

                    # 当前是使用的双引号,xxx也可以是变量 $a

--------- 查看匹配字符所在行的所有字符串 ------

grep -r admin passwd |awk -F = '{print $0}'

                    # 在passwd 文件里面的 admin 字符所在的行

                    # awk 字段处理,  $0 当前行的所有列(全部)

grep -v abc # grep 不匹配字符串

-------------------- 脚本操作文件 ----------------------------

!/bin/bash

aa="/root/d" # 定义变量为一个目录

for bb in $aa/* ; do # 将 aa 的值赋给 bb 继承

if [ -d $bb ]; then # if 判断 $bb 变量是目录,然后就:

                    # -d 目录

rm -rf $bb # 删除一个目录下所有的文件

fi # fi 结束

done

!/bin/bash

direc="/root/d" # 定义direc变量 的值为目录

for dir2del in $direc/* ; do

                    # dir2del in 是 变量$direc 的值

if [ -d $dir2del ]; then # 判断 $dir2del 是目录,然后就

rm -rf $dir2del # 清空文件夹

fi

done

!/bin/sh

cat "/root/1.txt" | while read line; do

                    # 查看文件内容,并将它赋值给变量 line

echo $line; # 以系统默认编码来打印

done

读取文件属性

                    if elif else

用来判断文件的参数:

-r 可读 -b块设备文件 -c 字符设备 -d 目录 -f 普通文件 -g SGID位 -k站着位stick bit

-p 管道 -u SUID -r 可读 -w 可写 -x 执行 -s 文件为空 -e 文件存在

逻辑判断:

相等 -eq 不相等 -ne 大于 -gt 大等于 -ge 小于 -lt 小等于 -le

非运算 ! 或运算 -o 与运算 -a

!/bin/bash

file=${file:?'必须给出参数'}

file=1.sh # 给变量赋值为一个文件

file=$file # 将参字符串赋值给变量

if [ ! -e $file ]; then # 判断 ! -e 不存在文件,然后就

echo "$file 不存在"        # 打印字符串

exit 1                    # 文件不存在就退出程序,不向下执行

fi # if 和 fi 开始与结束

if [ -d $file ]; then # 判断变量$file -d 是文件夹,然后就

echo "$file 是一个目录"    # 打印字符串

if [ -x $file ]; then        # 判断变量 -x 执行,然后就

    echo "可以"

else

    echo "不可以"

fi
echo "对此进行搜索"              # echo 打印变量

elif [ -f $file ]; then # 循环语句 if elif else

                        # -f 是普通文件,然后就  

echo "$file 是一个正规文件"        

else # else 其他的情况

echo "$file不是一个正规文件"

fi

if [ -O $file ]; then # -O 用户组

echo "你是$file的拥有者"

else

echo "你不是$file的拥有者"

fi

if [ -r $file ]; then # -r 可读

echo "你对$file拥有"

else

echo "你并不对$file拥有"

fi

echo "可读权限" # 连接打印:上一条和本条信息顺序连在一起了

if [ -w $file ]; then # -w 可读

echo "你对$file拥有"

else

echo "你并不对$file拥有"

fi

echo "可写权限"

if [ -x $file -a ! -d $file ]; then # -x 可执行

echo "你拥有对$file"

else

echo "你并不拥有对$file"

fi

echo "可执行的权限"

写入文件属性
通过chattr命令修改属性能够提高系统的安全性,但是它并不适合所有的目录。chattr命令不能保护/、/dev、/tmp、/var目录。

chattr [-RV] [-+=AacDdijsSu] [-v version] 文件或目录

-R:递归所有子目录 -V:详细显示修改内容

-:失效属性。 +:激活属性。

= :指定属性。 A:Atime 不要修改文件的最后访问时间

S:Sync 写到磁盘 a:Append Only,系统只允许追加数据

i:Immutable 不允许修改 D:检查压缩文件中的错误。

d:No dump 备份时忽略文件 C:Compress 系统以透明的方式压缩这个文件

S:Secure Delete 删除时用0填充 u:Undelete 删除这个文件,系统会保留其数据

chattr +i /etc/resolv.conf # +i 防止修改

lsattr /etc/resolv.conf # 查看文件属性

chattr +a /var/log/messages # +a只能追加数据

12.枚举一个目录中的所有文件夹

!/bin/bash

OLDIFS=$IFS

IFS=:

for path in $( find "%%1" -type d -printf "%p$IFS")

do

"$path"

done

IFS=$OLDIFS

14.复制一个目录下所有的文件夹到另一个目录下

!/bin/bash

direc="%%1" #$(pwd)

for dir2cp in $direc/* ; do

if [ -d $dir2cp ]; then

cp $dir2cp "%%2"

fi

done

16.移动一个目录下所有的文件夹到另一个目录下

!/bin/bash

direc="%%1" #$(pwd)

for dir2mv in $direc/* ; do

if [ -d $dir2mv ]; then

mv $dir2mv "%%2"

fi

done

17.以一个文件夹的框架在另一个目录下创建文件夹和空文件

!/bin/bash

direc="%%1" #$(pwd)

OLDIFS=$IFS

IFS=:

for path in $( find $direc -type d -printf "%p$IFS")

do

mkdir -p "%%2/${path:${#direc}+1}"

done

IFS=$OLDIFS

cp -a "%%1" "%%2"

表达式

1,取得字符串长度和位置

string=abc12342341 # 赋值一个变量

echo ${#string} # 响应变量的长度

expr length $string # 响应变量的长度

expr "$string" : ".*" # 结果11 字符串所在位置

expr index $string '1' # 结果4 字符串对应的下标是从0开始

2,字符串截取

echo ${string:4} # 从第4位开始截取后面所有字符串

echo ${string:3:3} # 从第3位开始截取后面3位

echo ${string:3:6} # 从第3位开始截取后面6位

echo ${string: -4} # :右边有空格 截取后4位

echo ${string:(-4)} # 同上后四位

expr substr $string 3 3 # 从第3位开始截取后面3位

6,截取不匹配的内容:去掉匹配到的内容

echo ${string#a*3} # 42341 从$string左边开始,去掉最短匹配子串

echo ${string#c*3} # abc12342341 这样什么也没有匹配到

echo ${string#c13} # 42341 从$string左边开始,去掉最短匹配子串

echo ${string##a*3} # 41 从$string左边开始,去掉最长匹配子串

echo ${string%3*1} # abc12342 从$string右边开始,去掉最短匹配子串

echo ${string%%3*1} # abc12 从$string右边开始

7,匹配并且替换

echo ${string/23/bb} # 将变量中的23 替换为 bb

echo ${string//23/bb} # 双斜杠替换所有匹配

echo ${string/#abc/bb} # #号以什么开头来匹配,根php中的^有点像

echo ${string/%41/bb} # %以什么结尾来匹配,根php中的$有点像

上一篇:express + mysql实践


下一篇:druid和hikariCP 数据库连接池