Skip to content

Commit

Permalink
x
Browse files Browse the repository at this point in the history
  • Loading branch information
privking committed Aug 24, 2021
1 parent d0cacdc commit 716a646
Show file tree
Hide file tree
Showing 4 changed files with 257 additions and 4 deletions.
95 changes: 94 additions & 1 deletion java/java基础/10regex正则.md
Original file line number Diff line number Diff line change
Expand Up @@ -280,4 +280,97 @@
"/(.*at)/" => <a href="#learn-regex"><strong>The fat cat sat on the mat</strong></a>. </pre>

<pre>
"/(.*?at)/" => <a href="#learn-regex"><strong>The fat</strong></a> cat sat on the mat. </pre>
"/(.*?at)/" => <a href="#learn-regex"><strong>The fat</strong></a> cat sat on the mat. </pre>

## 正则替换字串

```
abcde_123
匹配:
(\S+)_(\d+)
替换:保留abcde_ ,数字替换为aa
$1_aa 或者是 \1_aa
$1或\1表示第一个括号匹配到的内容
$0表示匹配到的一整行
```

## 正则替换大小写

```
\U 将匹配项转为大写(Upper)
\L 将匹配项转为小写(Lower)
\E 终止转换,转换从\U或\L开始到\E结束之间的字母大小写类型.(End)
abcde_123
匹配:
(\S+)_(\d+)
替换:将abcde替换为大写,将123替换为小写的ff
\U\1\E_ff
注意:如果没有\E,后面的ff也会被替换为大写
```



## java中正则Demo

```java
public static void main(String[] args) {
// 去除单词与 , 和 . 之间的空格
String str = "Hello , World .";
String pattern = "(\\w)(\\s+)([.,])";
// $0 匹配 `(\w)(\s+)([.,])` 结果为 `o空格,` 和 `d空格.`
// $1 匹配 `(\w)` 结果为 `o` 和 `d`
// $2 匹配 `(\s+)` 结果为 `空格` 和 `空格`
// $3 匹配 `([.,])` 结果为 `,` 和 `.`
System.out.println(str.replaceAll(pattern, "$1$3")); // Hello, World.
}
```

```java
//Java 中可以在小括号中使用 ?<name> 将小括号中匹配的内容保存为一个名字为 name 的副本。
//notepad++不行
public static void main(String[] args) {
String str = "@wjj 你好啊";
Pattern pattern = Pattern.compile("@(?<first>\\w+\\s)"); // 保存一个副本
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
System.out.println(matcher.group());
System.out.println(matcher.group(1));
System.out.println(matcher.group("first"));
}
}

/**
@wjj
wjj
wjj
**/
```

```java
//java中的标志
// i , g , m
public static void main(String[] args) {
String str = "1990\n2010\n2017";
// 这里应用了 (?m) 的多行匹配模式,只为方便我们测试输出
// "^1990$|^199[1-9]$|^20[0-1][0-6]$|^2017$" 为判断 1990-2017 正确的正则表达式
Pattern pattern = Pattern.compile("(?m)^1990$|^199[1-9]$|^20[0-1][0-6]$|^2017$");
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
System.out.println(matcher.group());
}
}

// Pattern pattern = Pattern.compile("(?i)\\w+"); // 推荐写法
```

## 常用正则表达式

汉字:`^[\u4e00-\u9fa5]{0,}$`
Email地址:`^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$`
域名:`^((http:\/\/)|(https:\/\/))?([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}(\/)`
手机号: `^([1][3,4,5,6,7,8,9])\d{9}$`
IP地址:`\d+\.\d+\.\d+\.\d+`
58 changes: 58 additions & 0 deletions linux/11Linux常用命令.md
Original file line number Diff line number Diff line change
Expand Up @@ -1061,6 +1061,58 @@ cut -d ':' -f 2- /etc/passwd
cut -c 2-9 /etc/passwd
```

## sed

对来自文件、以及标准输入的文本进行编辑

**常用参数**

- -n 取消默认输出 或`--quiet``--silent` 仅显示script处理后的结果
- -e `-e<script>``--expression=<script>` 以选项中指定的script来处理输入
- -f `-f<script文件>``--file=<script文件>` 以选项中指定的script文件来处理输入
- a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)
- c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
- d :删除
- i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
- s :取代,通常这个 s 的动作可以搭配正规表示法

```shell
# 在testfile文件的第四行后添加一行,并将结果输出到标准输出
sed -e 4a\newLine testfile
#将 /etc/passwd 的内容列出并且列印行号,同时,请将第 2~5 行删除!
# nl浏览文件并且显示行号
nl /etc/passwd | sed '2,5d'
# 只要删除第 2 行
nl /etc/passwd | sed '2d'
#要删除第 3 到最后一行
nl /etc/passwd | sed '3,$d'
#第二行后(亦即是加在第三行)加上『drink tea?』字样 反斜杠可以添加多行
nl /etc/passwd | sed '2a drink tea'
#在第二行前
nl /etc/passwd | sed '2i drink tea'
# 将第2-5行的内容取代成为『No 2-5 number』
nl /etc/passwd | sed '2,5c No 2-5 number'
#列出 /etc/passwd 文件内的第 5-7 行
# p代表print
nl /etc/passwd | sed -n '5,7p'
#搜索 /etc/passwd有root关键字的行
nl /etc/passwd | sed '/root/p'
# 仅列出匹配行
nl /etc/passwd | sed -n '/root/p'
# 删除/etc/passwd所有包含root的行,其他行输出
nl /etc/passwd | sed '/root/d'
# 替换
sed 's/要被取代的字串/新的字串/g'
/sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' | sed 's/Bcast.*$//g'
# 操作源文件
sed -i 's/\.$/\!/g' regular_express.txt
#直接在 regular_express.txt 最后一行加入 # This is a test:
# $ 代表的是最后一行,而 a 的动作是新增
sed -i '$a # This is a test' regular_express.txt
```



## awk

对数据列进行提取
Expand Down Expand Up @@ -1110,6 +1162,12 @@ awk -F ':' '{print "filename:" FILENAME ",linenumber:" NR ",columns:" NF ",lin
#filename:/etc/passwd,linenumber:2,columns:7,linecontent:daemon:x:1:1:daemon:/usr/sbin:/bin/sh
#filename:/etc/passwd,linenumber:3,columns:7,linecontent:bin:x:2:2:bin:/bin:/bin/sh
#filename:/etc/passwd,linenumber:4,columns:7,linecontent:sys:x:3:3:sys:/dev:/bin/sh

#截取文件的名称,去掉路径 ji
echo "usr/local/soft/aa.jpg" | awk -F"/" '{print $NF}'

#使用循环
echo "/usr/local/soft/aa.md" |awk -F"/" '{for(i=2;i<NF;i++){print "- "$i;}}'
```

## read
Expand Down
55 changes: 52 additions & 3 deletions linux/12shell.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,9 @@ echo 'hello world'

echo $((12 % 6))
echo $[12 % 6]

val=`expr $a + $b`
echo "a + b : $val"
```

## 条件判断
Expand Down Expand Up @@ -130,13 +133,13 @@ fi
## 多分支判断

```sh
if [条件判断];
if [ 条件判断 ];
then
执行动作
elif [条件判断];
elif [ 条件判断 ];
then
执行动作
elif [条件判断];
elif [ 条件判断 ];
then
执行动作
fi
Expand Down Expand Up @@ -309,3 +312,49 @@ do
done
```
## 管道
```sh
echo "ls head | awk -F\" \" 'NR==$random_head{print \$0}'"|bash
```
## 随机
$RANDOM
```sh
random_head=`expr $RANDOM % $headimgs_count + 1`
```
## 变量
```shell
#定义变量
pi=3.14
#获取到值
echo $pi
#导出变量
#导出的变量会共享给调用的脚本
#共享模式为拷贝副本,在后面的子脚本中,修改的只是副本的值
export age=10

```
## 数组
```shell
my_array=(A B "C" D)
echo "数组的元素为: ${my_array[*]}"
echo "数组的元素为: ${my_array[@]}"
echo "数组元素个数为: ${#my_array[*]}"
echo "数组元素个数为: ${#my_array[@]}"

array_name[0]=value0
array_name[1]=value1
array_name[2]=value2
echo "第一个元素为: ${my_array[0]}"
echo "第二个元素为: ${my_array[1]}"
echo "第三个元素为: ${my_array[2]}"
echo "第四个元素为: ${my_array[3]}"
```
53 changes: 53 additions & 0 deletions linux/14定时任务.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# 定时任务 crontab

## 安装crontab

一般centos安装了crontab

```shell
yum install crontabs
```

## 查看运行状态

```shell
systemctl status crond
systemctl enable crond
systemctl start crond
```

## 查询定时任务列表

```shell
crontab -l
```

## 管理定时任务列表

实际上就是一个文件

```shell
crontab -e

0 19 * * * bash /root/test.sh
```

## cron表达式

```text
# .---------------- 分钟,取值范围为 0-59
# | .------------- 小时,取值范围为 0-23
# | | .---------- 日,取值范围为 1-31
# | | | .------- 月,取值范围为 1-12
# | | | | .---- 星期,取值范围为 0-7,0 和 7 都表示星期日
# | | | | | .-- 要执行的命令
# | | | | | |
0 19 * * * bash /root/test.sh
```

## 直接操作文件实现管理任务

```sh
echo "*/10 * * * * "$base_path/change_images.sh >> /var/spool/cron/root
```

0 comments on commit 716a646

Please sign in to comment.