V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
ps1aniuge
V2EX  ›  Linux

为了实现查找替换配置文件格式化,自动化。简单化。我编写了一个脚本。

  •  
  •   ps1aniuge · 2018-08-23 18:04:18 +08:00 · 2312 次点击
    这是一个创建于 2287 天前的主题,其中的信息可能已经有所发展或是发生改变。
    这是一个 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
    ```
    第 1 条附言  ·  2018-09-17 12:35:09 +08:00
    ps 找算替 2.05 于 2018-09-16 出炉。
    新增:块查找功能。即块首----块尾,之间的东西全都替换。

    脚本下载地址:
    https://pan.baidu.com/s/1yuqUOhY9lEw65vJ-vceg4w
    7 条回复    2018-09-04 13:48:11 +08:00
    yiyiwa
        1
    yiyiwa  
       2018-08-23 21:06:00 +08:00
    openwrt 可以用吗? 看起来不错啊。
    Wolther47
        2
    Wolther47  
       2018-08-24 09:22:32 +08:00 via iPhone
    和 sed awk 比有什么优势吗 // 疑问句,没有其他意思
    ps1aniuge
        3
    ps1aniuge  
    OP
       2018-08-24 15:08:06 +08:00
    区分大小写! 不支持正则!

    脚本下载地址:
    https://pan.baidu.com/s/1Ha1tX-FJ4U3NxWtaDsYEIw

    openwrt 是 mips cpu 吧,不支持 mips cpu,支持 arm cpu。

    和 awk sed 比,劣势是不支持正则。优势是简单。合理标准。用中文定义参数名,容易懂。win,linux 通用。
    ps1aniuge
        4
    ps1aniuge  
    OP
       2018-08-24 15:41:21 +08:00
    不支持正则,99.99%不会出错。不支持正则,我编写脚本简单。你用着也简单。

    $某找替参数 = @{
    找什么 =
    @'
    这里可以有,不成对的单引号,双引号,也无需转义。
    不用转义,这点比 sed 好很多
    请看,下行我放入一个单引号
    '
    '@
    }

    & /powershell/ps 找算替简易版.ps1 @某找替参数
    ps1aniuge
        5
    ps1aniuge  
    OP
       2018-08-25 21:29:11 +08:00
    https://github.com/teknoraver/snap-openwrt
    假如你的 openwrt 支持 [snap 包格式的软件] ,就可以用。

    @Wolther47
    zhanglintc
        6
    zhanglintc  
       2018-09-04 13:40:14 +08:00
    @ps1aniuge #3 不是说的脚本么... 怎么盘里的大小是 141Mb? 装的是核弹吗? [哭笑]
    ps1aniuge
        7
    ps1aniuge  
    OP
       2018-09-04 13:48:11 +08:00
    你打开看看就知道了。为了支持 win7,但不支持 win7+powershell2.0。提供了 powershell 升级包。升级包对 linux 无用。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5501 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 08:46 · PVG 16:46 · LAX 00:46 · JFK 03:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.