真知棒系列之 Shell

真知棒系列主要是将平时开发过程中后知后觉的知识点进行了部分的规整。真知,棒!

获取、过滤、替换

curl file | grep -i qs.m | sed ‘s/<a.*<\/a><\/td>/ /g’ > a.html
-i 忽略大小写

sed 替换

‘s/XX/YY/g’ 将所有 XX 替换为 YY
^表示开头 $表示结尾

如 sed -e ‘s/^[[:space:]]//‘ 去除开头空格 sed -e ‘s/[[:space:]]$//‘ 去除结尾空格

替换时用变量

-i '.bak' ''"$index"'s?nop?rdy.'"$address"'?g'``` 直接替换第$index行的nop为rdy.$address
1
2
3
4
5
6
7
8
9
10
/可以更换为? 效果相同,建议更换为与内容不冲突的
-i 改动直接覆盖原文件,macosx中bash需要指定类似".bak"来做备份
内部变量以'"$index"'作为整体,外部以''包含(默认是""包含)

#### 文件名、后缀获取

获取最后一个.前的字符和最后一个.后的字符,可用于文件名和后缀的获取
```ruby
name=`echo ${filename%.*}`
houzhui=`echo ${filename##*.}`

同理,可以将.改成其它字符,如

1
2
3
"1+./Resource/"
index=`echo ${line%+*}`
address=`echo ${line##*+}`

以+进行分割

字符串拼接

1
2
3
4
5
6
7
8
9
10
11
12
```filename1="$filename""b"``` 字符串常量与变量拼接
```filename2=${filename}"b"``` 字符串常量与变量拼接(与上者的区别是${}内可以做截取替换等操作,如```${#filename}```返回 filename 字符串的长度)
```filename3=${i}`echo "+"` ``` 字符串变量与执行结果拼接

#### 剪切

按行剪切,取以.分割后的第4个域
cut -d'.' -f 4 -d'.' 指定分隔符为. -f 4 获取第4个域
cut 默认分割符为\t制表符

cut -b 3-6 取第3-6个字节
cut -c 3-6 取第3-6个字符(与上者的区别为,中文时要用-c否则乱码)

echo “pageID FrameID ProtocolID” > ~/Desktop/lingfei/requestResult.txt;
cd ~/Desktop/lingfei/log/;
ls . | xargs cat | grep -v “CBAS” | cut -d “,” -f 2-4 | sort | uniq | sort -t “:” -k 4 | sed ‘s/,pageID:/ /g’ | sed ‘s/,.:/ /g’ | sed ‘s/^.://g’ | awk ‘{ print $3” “$1” “$2}’ | awk ‘{ print $1” | “$2” | “$3” | “}’>> ~/Desktop/lingfei/requestResult.txt

1
2
3
4

#### scp

```scp -r -q ios@172.20.0.124:/data/www/html/ios/requestLog_uploads/* ~/Desktop/lingfei/log/

免密执行 sudo

echo 'yourpassword' | sudo -S sh shell.sh

awk

$NF 最后一项

文章目录
  1. 1. 获取、过滤、替换
  2. 2. sed 替换
  3. 3. 字符串拼接
  4. 4. 免密执行 sudo
  5. 5. awk