Shell考题中级篇

写脚本实现,可以用shell、perl等。把文件b中有的,但是文件a中没有的所有行,保存为文件c,并统计c的行数。

grep -v -x bbb -f aaa  > ccc && wc -l ccc

有如下文本,请将其中的IP进行替换,如:1.1.1.1改成1.*.*.1

a = "123.123.123.34, 124.23.34.32, 123,43,21,42"
b = "12.34.32.45"
c = "ip: 123.45.56.67"
d = '{"ip":"45.54.67.34"}'
sed -r 's/([0-9]+).([0-9]+).([0-9]+).([0-9]+)/1.*.*.4/g' file

有如下文本,请打印的行包含a,也必须包含b,也必须包含c

123bca
456xac
789cbd
awk '/a/ && /b/ && /c/'

批量创建文件及改名

  1. 使用for循环在/oldboy目录下通过随机小写10个字母,批量创建10个html文件,名称例如为:cfedefaede_oldboy.html
  2. 请用至少两种方法实现,将以上文件名中的oldboy全部改成oldgirl(用for循环实现),并且html改成大写
#!/bin/bash
[ -d /oldboy ] || mkdir -p /oldboy
# 检测目录是否存在,若是不存在则手动创建

for i in `seq 1 10`;
# 创建相应的html文件
  do
    # name=$(echo $(date) | md5sum | tr -d '[0-9]|' | cut -c 1-10)
    # 本来我是想用上面这种方式来生成文件名的,但是用上面这种方法必须设置sleep,并未sleep的值不能小于1S
    name=$(echo $RANDOM | sha512sum | tr -d '[0-9]' | cut -c 1-10)
    touch /oldboy/${name}_oldboy.html
  done
# 创建相应的html文件

File=$(ls /oldboy | grep "[a-Z]+_oldboy.html")
# 我参考老男孩的答案,发现他们是直接更改整个目录下面的文件,个人觉得还是过滤一下比较好。

cd /oldboy

# 方式1
for file in $File;
  do
    mv $file `echo $file | sed -e "s/oldboy/oldgirl/" -e "s/html/HTML/"`
  done


# 方式2
for file2 in $File;
  do
    mv $file ${file/oldboy.html/oldgirl.HTML}
  done
View Code
原文地址:https://www.cnblogs.com/guge-94/p/11540261.html