技术解析

为了实现查找替换配置文件格式化,自动化。简单化。我编写了一个脚本。
0
2021-06-22 11:38:30
idczone
这是一个 win,linux 通用的 powershell 脚本。
我今天打算只放出功能说明,和例子。让大家点评功能。
欢迎提供意见。

明天贴出脚本,或下载地址。


----------------- [概述] -----------------
ps 找算替简易版.ps1 即 powershell 版的简易 sed。

1 找、算、替、是啥意思?
1.1 找
1.2 算。
即你可以自己编写函数,用来处理找到的结果,函数运行完毕后,产生要 [替] 的字符串。
这块功能简单。但我没开发。目前只弄好了找替功能。
1.3 替


2 我开发这个替换脚本,为了替换标准化,参数化。简化配置文件的处理。
3 我认为此简易版足够 80%用了。免费使用。
4 根据需求,后续会开发块替换版,正则版。或许收费。
5 支持下列 os。系统需求:
5.1 win7 + powershell 5.1
5.2 win10 + powershell 5.1
5.3 linux + powershell 6.0,6.1

6 问题反馈:
powershell 交流群
QQ 群号=183173532



----------------- [ ps 找算替简易版.ps1 参数说明] -----------------
-输入文件全路径 'xxx.txt' 支持 win 决绝路径,相对路径。支持 linux 绝对路径,相对路径。

-输出文件全路径 字符串 默认 空
值:
●空值。会备份输入文件。从源文件名,到,源文件名.年月日时分秒.powershell
●“直接写输入文件,不需要备份”
●一个输出文件路径
输出文件已经存在时,会覆盖输出文件!!!



-输入文件编码 是一个数字,如果输入文件有 bom 头,则会忽略此参数。
默认为空,空则报错退出。也就是说必须 [显式指定] 此参数
输入错误的编码,将导致输入文件损坏。

数字,对应的 [输入文件] 编码
20127 Ascii
936 gbk
54936 gb18030
950 big5
1200 Unicode
1201 BigEndianUnicode
12000 UTF32
12001 BigEndianUTF32
65001 UTF8
========================
-找什么 字符串
-用正则查找 布尔 。默认 $false。暂不支持正则查找。
-区分大小写 布尔 。默认 $true。暂不支持忽略大小写。
-查找返回的结果必须唯一 布尔 默认 $true。
-查找模式:
值:
●'行' 默认是行。行中含有查找内容,先删除此整行,用 -替换成啥 输入的 [字符串] 来替换。可以用来 “去除行首#号和空格”。
●'字符串',在整个文件中查找字符串。找到后,用 -替换成啥 输入的 [字符串] 来替换。 支持查找回车“`n ”
●'块',暂不支持。

-找不到则在文件末尾追加 布尔 。默认 $false。
当 找不到则在文件末尾追加 = $false,找不到关键字,则报错退出。
当 找不到则在文件末尾追加 = $true,找不到关键字,则在文件末尾追加。

========================
-替换成啥 字符串
-返回结果不唯一时 字符串。 默认 '只替换最后一个'
值:
●'只替换第一个'
●'只替换最后一个'
●'全部替换'

-输出文件编码 linux 字符串 默认 'utf8 无 bom' 。如果输入文件有 bom 头,则会忽略此参数。
值:
●'utf8 无 bom'
●'utf8 有 bom'
●'utf16le 有 bom'

-输出文件编码 win 字符串 默认 'utf16le 有 bom' 。如果输入文件有 bom 头,则会忽略此参数。
值:
●'utf8 无 bom'
●'utf8 有 bom'
●'utf16le 有 bom'

输出文件,只支持上述三种编码。



----------------- [脚本例子。脚本文件名: gb 关闭 selinux.ps1 ] -----------------
#本例子 linux 测试通过。
#本例子 先把 [ ps 找算替简易版.ps1 ] 保存在 [/powershell/] 中
#本例子目的:
#任何带有 SELINUX=enforcing 的行,先清空。后写入 SELINUX=disabled。若找不到,则报错。

```
$gb 关闭 selinux 参数 =
@{
输入文件全路径 = '/etc/selinux/config'
输出文件全路径 = ''
输入文件编码 = 65001
找什么 = 'SELINUX=enforcing'
查找返回的结果必须唯一 = $true
查找模式 = '行'
替换成啥 = 'SELINUX=disabled'
返回结果不唯一时 = '全部替换'
找不到则在文件末尾追加 = $false
}


& /powershell/ps 找算替简易版.ps1 @gb 关闭 selinux 参数
```

----------------- [脚本讲解] -----------------
1 先建立一个哈希表, [$gb 关闭 selinux 参数]
2 执行 [ ps 找算替.ps1 ] ,按哈希表中的参数替换。
3 输入文件编码 = 65001
如果输入文件有 bom 头,则会忽略此参数。此例子无 bom 头,则此参数必须设置,否则报错。
4 输出文件全路径 = ''
会备份文件,
5 查找替换完毕后,再次运行脚本,会报错“找不到关键字”


----------------- [成品脚本 1 脚本文件名: gb 关闭 sshd 的 dns.ps1 ] -----------------
#本例子 linux 测试通过。
#本例子 先把 [ ps 找算替简易版 v1.22.ps1 ] 保存在 [/powershell/] 中
#本例子目的:
#任何带有 UseDNS,#UseDNS 的行,先清空。后写入 UseDNS no。若找不到,则在文件尾部添加
```
$gb 关闭 sshd 中的 dns =
@{
输入文件全路径 = '/etc/ssh/sshd_config'
输入文件编码 = 65001
输出文件全路径 = ''
找什么 = 'UseDNS'
替换成啥 = 'UseDNS no'
查找模式 = '行'
找不到则在文件末尾追加 = $true
查找返回的结果必须唯一 = $true
返回结果不唯一时 = '全部替换'
}


& /powershell/ps 找算替简易版 v1.22.ps1 @gb 关闭 sshd 中的 dns
```
openwrt 可以用吗? 看起来不错啊。

和 sed awk 比有什么优势吗 // 疑问句,没有其他意思

区分大小写! 不支持正则!
脚本下载地址:
https://pan.baidu.com/s/1Ha1tX-FJ4U3NxWtaDsYEIw
openwrt 是 mips cpu 吧,不支持 mips cpu,支持 arm cpu。
和 awk sed 比,劣势是不支持正则。优势是简单。合理标准。用中文定义参数名,容易懂。win,linux 通用。

不支持正则,99.99%不会出错。不支持正则,我编写脚本简单。你用着也简单。
$某找替参数 = @{
找什么 =
@'
这里可以有,不成对的单引号,双引号,也无需转义。
不用转义,这点比 sed 好很多
请看,下行我放入一个单引号
'
'@
}
& /powershell/ps 找算替简易版.ps1 @某找替参数

https://github.com/teknoraver/snap-openwrt
假如你的 openwrt 支持 [snap 包格式的软件] ,就可以用。
@Wolther47

不是说的脚本么... 怎么盘里的大小是 141Mb? 装的是核弹吗? [哭笑]

你打开看看就知道了。为了支持 win7,但不支持 win7+powershell2.0。提供了 powershell 升级包。升级包对 linux 无用。

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服