如何让 sed 只更改每个字母的所有实例一次?

2024-02-08

到目前为止,代码只更改了第一个字母。如果我进行突破,那么它会多次更改字母的每个实例(这很糟糕)。我只是尝试使用 sed 进行凯撒密码。我意识到我可以使用 tr 来执行文本转换,但我更愿意坚持使用 sed。

echo "What number do you want to use for the shift?"
read num

declare -A origin

x=({a..z})

case "$num" in
    0)
    y=({a..z});;1)y=({{b..z},a});;2)y=({{c..z},a,b});;3)y=({{d..z},a,b,c});;4)y=({{e..z},a,b,c,d});;5)y=({{f..z},{a..e}});;
    6)y=({{g..z},{a..f}});;7)y=({{h..z},{a..g}})
    ;;
    8)
    y=({{i..z},{a..h}})
    ;;
    9)
    y=({{j..z},{a..i}})
    ;;
    10)
    y=({{k..z},{a..j}})
    ;;
    11)
    y=({{l..z},{a..k}})
    ;;
    12)
    y=({{m..z},{a..l}})
    ;;
    13)
    y=({{n..z},{a..m}})
    ;;
    14)
    y=({{o..z},{a..n}})
    ;;
    15)
    y=({{p..z},{a..o}})
    ;;
    16)
    y=({{q..z},{a..p}})
    ;;
    17)
    y=({{r..z},{a..q}})
    ;;
    18)
    y=({{s..z},{a..r}})
    ;;
    19)
    y=({{t..z},{a..s}})
    ;;
    20)
    y=({{u..z},{a..t}})
    ;;
    21)
    y=({{v..z},{a..u}})
    ;;
    22)
    y=({{w..z},{a..v}})
    ;;
    23)
    y=({{x..z},{a..w}})
    ;;
    24)
    y=({{y..z},{a..x}})
    ;;
    25)
    y=({{z..z},{a..y}})
    ;;
    *)
    echo "Sorry, you must use a shift from 0 to 25."
    ;;
esac

for i in {0..25}
do
    origin[${x[i]}]=${y[i]}
done

for i in {0..25}
do
    origin[${x[i]}]=${y[i]}
done

for a in "${!origin[@]}"
do
    for x in "${!origin[@]}"
    do
        sed -i 's/'${x}'/'${origin[${x}]}'/g' test.txt
        break
    done
done

下面执行凯撒密码(移位 3):

sed -i y/$(printf "%s" {a..z})/$(printf "%s" {d..z} {a..c})/ test.txt

解释

y是 sed 的翻译命令。$(printf "%s" {a..z})返回一个字符串。要查看它们是如何组合在一起的,请使用echo。它显示了 bash 执行扩展后的最终 sed 命令:

$ echo sed -i y/$(printf "%s" {a..z})/$(printf "%s" {d..z} {a..c})/ test.txt
sed -i y/abcdefghijklmnopqrstuvwxyz/defghijklmnopqrstuvwxyzabc/ test.txt

使用此命令,每次出现a将被替换为d,每次出现b将被替换e, 等等。

变速

以下脚本采用一个参数,即一个整数。然后,它对该整数执行凯撒移位:

#!/bin/bash
alpha=$( printf "%s" {a..z} )
part1=$( printf $(printf '\%03o' $(seq $((97+$1)) 122 ) ) )
part2=$( printf $(printf '\%03o' $(seq 97 $((97+$1-1)) ) ) )
sed -i y/$alpha/$part1$part2/ test.txt

例如,假设我们有这个输入文件:

$ cat test.txt
and abc xyz 

让我们执行 4 班制:

$ bash script.sh 4
$ cat test.txt
erh efg bcd
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何让 sed 只更改每个字母的所有实例一次? 的相关文章

  • 未找到命令“ember”

    看来我搞砸了 ember cli 安装 我已经使用 sudo 安装了 npm 但是在阅读了 npm 上 ember cli 和 sudo 的一些问题后 我按照此处的说明卸载并重新安装https gist github com isaacs
  • 从 TypeScript 运行任何 Linux 终端命令?

    有没有办法直接从 TypeScript 类中执行 Linux 终端命令 这个想法是做类似的事情 let myTerminal new LinuxTerminal let terminalResult myTerminal run sudo
  • 如何显示 zsh 函数定义(如 bash“type myfunc”)?

    如何在 zsh 中显示函数的定义 type foo没有给出定义 在bash中 bash function foo echo hello bash foo hello bash type foo foo is a function foo e
  • 文本处理问题:删除其中一列不包含特定值的行

    我有一个制表符分隔的文件 如下所示 input sequence match sequence score receptor group epitope antigen organism ASRPPGGVNEQF ASRPPGGVNEQF
  • bash 变量中的 Linux 鞭尾/对话框参数错误

    有人可以解释为什么下面的代码不起作用吗 我要疯狂地想找出答案 bin bash TEST M1 1 wire Interface ON echo TEST RESULT dialog title Config Modules State c
  • 如何使用 sed 仅删除双空行?

    我找到了这个问题和答案 https stackoverflow com questions 4651591 howto use sed to remove only triple empty lines关于如何删除三重空行 但是 我只需要对
  • powershell stdin 管道和重定向

    你好 我一直在制作一个小的跨平台脚 本 我可以将其卷曲并通过管道传输到bash和Powershell中 基本思想是服务器向解释器发送一个命令 然后它给出一个命令将所有输出重定向到标准输出 bash 中的一个例子是 some commands
  • 在 Linux 中禁用历史记录 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 要在 Linux 环境中禁用历史记录 我执行了以下命令 export HISTFILESIZE 0 export HISTSIZE 0 u
  • Godaddy 托管上的 CakePHP 控制台

    我一直在努力让我的 CakePHP 网站在 Godaddy 网格托管 帐户上运行 我的蛋糕应用程序设置是从帐户的子目录托管的 并且可以通过子域访问 我必须调整我的 htaccess 文件才能使其正常工作 现在我需要让 CakePHP 控制台
  • 在bash中,是否有相当于“错误消息”的东西

    在 perl 中 您可以使用错误消息退出die some msg bash 中是否有等效的单个命令 现在 我正在使用命令来实现这一点 echo some msg exit 1 你可以很容易地自己推出 die echo 1 gt 2 exit
  • Bash 解析和 shell 扩展

    我对 bash 解析输入和执行扩展的方式感到困惑 对于输入来说 hello world 作为 bash 中的参数传递给显示其输入内容的脚本 我不太确定 Bash 如何解析它 Example var hello world displaywh
  • .profile 无法从 Mac 终端运行

    我有一个 profile 文件 我正在终端中读取并使用别名 但在某些时候 别名由于没有明确的原因而停止工作 其他命令仍在工作 为了快速修复 我删除了 rm 并在用户目录中重新创建了 profile 文件 我可以看到 至少在该目录中没有 ba
  • 如何在数组中存储包含双引号的命令参数?

    我有一个 Bash 脚本 它生成 存储和修改数组中的值 这些值稍后用作命令的参数 对于 MCVE 我想到了任意命令bash c echo 0 0 echo 1 1 这解释了我的问题 我将用两个参数调用我的命令 option1 without
  • 如何判断 Bash 中是否存在文件?

    这会检查文件是否存在 bin bash FILE 1 if f FILE then echo File FILE exists else echo File FILE does not exist fi 我如何只检查文件是否存在not ex
  • 对目录中的所有文件执行命令

    有人可以提供执行以下操作的代码 假设有一个文件目录 所有这些文件都需要通过程序运行 该程序将结果输出到标准输出 我需要一个脚本 该脚本将进入一个目录 对每个文件执行命令 并将输出连接到一个大输出文件中 例如 要在 1 个文件上运行命令 cm
  • 使用 find 命令搜索直到第一个匹配项

    我只需要搜索可以在任何地方的特定目录有没有办法运行此命令直到第一个匹配 谢谢 我现在使用 find noleaf name experiment type d wc l 正如鲁道夫 米尔鲍尔 Rudolf M hlbauer 所提到的 qu
  • 两种情况或 if 哪个更快? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我必须制作一个 非常 轻的脚本 它将接受用户的选项并调用脚本中的函数来执行一些任务 现在我可以使用 IF 和 CASE 选项 但我想知道两
  • Linux:在文件保存时触发 Shell 命令

    我想在修改文件时自动触发 shell 命令 我认为这可以通过注册 inotify 挂钩并调用来在代码中完成system 但是是否有更高级别的 bash 命令可以完成此任务 尝试 inotify 工具 我在复制链接时遇到问题 抱歉 但 Git
  • 获取变量的名称作为输入并使用该名称更改变量

    我从脚本用户那里获取变量的名称作为第一个参数 并将该变量的值回显到控制台 bin bash variablename 1 echo The value of variablename is variablename 这太棒了 我无法开始工作
  • 分叉/多线程进程|重击

    我想让我的代码的一部分更加高效 我正在考虑让它分叉成多个进程 并让它们一次执行 50 100 次 而不是只执行一次 例如 伪 for line in file do foo foo2 foo3 done 我希望这个 for 循环运行多次 我

随机推荐

  • 检测用户滚动了多少

    我的网站上有图像弹出功能 以便当用户单击页面上的较小版本时向用户显示完整分辨率的图片 这是当前的CSS它的定位是 div enlargedImgWrapper position absolute top 30px left 55px z i
  • NestJS 从 GridFS 返回一个文件

    我正在尝试使用 Nest 控制器从 GridFS 返回文件 据我所知 Nest 不尊重我的习惯content type我设置的标题application zip 因为我在返回时收到文本内容类型 参见屏幕截图 响应数据图像 错误的内容类型标头
  • 删除文件然后目录

    到目前为止我有这个
  • 使用 zlib 从 pdf 中提取文本

    我正在使用该函数在 pdf 文件中查找文本并将该文本替换为另一个文本 问题是当我进行 inflate 然后更改文本并 deflate 时 在最终的 pdf 中有时会丢失一些文本或图形 这是我的代码中的错误或 zlib 库不支持此压缩或其他什
  • 在 OSX 10.9.2 上安装 Composer 时出现分段错误 11

    我一直在尝试安装作曲家 但不断收到错误 分段错误 11 以下是我尝试过的列表 须藤卷曲 sShttps getcomposer org installer https getcomposer org installer php Output
  • OnListItemClick 事件不起作用

    我一直面临一个问题 有五个不同的 Java 类MainActivity Application ApplicationAdapter FetchData FetchDataListener 我正在从 api 绑定 mysql 数据ListV
  • 如何让ScrollBar在手机上始终可见? (CSS) (iPhone)

    我制作了一个具有滚动功能的div 滚动条出现在我的桌面浏览器 chrome safari firefox 上 但在移动设备上 滚动条不可见 不过滚动可以 我怎样才能让它一直可见 scroll log overflow y auto max
  • 更改资源的基本 URL

    我正在使用 Angular 在同一应用程序上使用 RESTful API 我有一个 resource 设置contacts资源位于http sample site com api contacts 这很棒并且有效 但是我需要与基本的 CRU
  • Docker 与 php 内置服务器

    我正在尝试运行 php 内置服务器 php S localhost 8080 通过docker 我无法从主机访问站点 我总是以连接重置告终 这是我构建的一个简单的 Dockerfile FROM centos centos6 RUN rpm
  • 无法将 Illuminate\Http\UploadedFile 类型的对象用作数组

    我尝试发送附件文件 但我得到 无法将 Illuminate Http UploadedFile 类型的对象用作数组 我用的是 Laravel 5 4 有人知道我为什么会收到此错误吗 我不将文件上传到目录中 我只想发送控制器上请求的文件 希望
  • Java Arraylist - 将一个数组复制到另一个而不重复

    我有一个ArrayList Arraylist
  • Scikit Learn 多标签分类:ValueError:您似乎正在使用旧的多标签数据表示形式

    我正在尝试将 scikit learn 0 17 与 anaconda 2 7 结合使用来解决多标签分类问题 这是我的代码 import pandas as pd import pickle import re from sklearn c
  • 如何从 Netlogo 中的未排序列表中删除多个项目

    所以我对 Netlogo 中的列表有点挣扎 所以基本上我有两个列表 我想从列表 2 中删除列表 1 中的项目 例如 列表 1 8 6 9 7 1 3 列表2 5 9 8 结果列表 6 7 1 3 我已尝试以下代码 但它返回一个空列表 if
  • CSS 背景 url () 不会出现在 IE 中,适用于 FF/Safari

    我正在为可怕的 IE6 调试我的网站 但我真的被难住了 在火狐浏览器中的外观 http dl client getdropbox com u 5822 firefox tiff http dl client getdropbox com u
  • 复选框组内的shinyBS模态

    I use shinyBS bsModal 在那里放置 UI 元素的说明 当我放置一个时效果很好bsButton 在复选框标题后面 现在我想将它放在复选框选项后面 第一个提示可能是这个答案 https stackoverflow com q
  • 如何查找 stats_norecompute = ON 的索引

    我正在寻找一个 SQL Server 2005 查询 它将列出所有索引及其各自的 STATISTICS NORECOMPUTE 值 我在 sysindexes 中没有看到任何与该值对应的明显值 该列是no recompute in 系统统计
  • 我如何告诉 Phusion Passenger 使用哪个 python?

    我将 Phusion Passenger 与 ruby 应用程序一起使用 我还想将其设置为与我正在开发的 django appengine 应用程序一起使用 谷歌搜索 passenger wsgi py 我能够得到以下非常简单的非 djan
  • 使用 jQuery 检索 HTML 数据属性

    如何使用 jQuery 获取存储在数据属性中的值 div class sm tot 使用 jQuery data https api jquery com data 功能 var speed yourdiv data ts speed di
  • Codeigniter (PHP) 中的注销问题

    我将 loginuserid 存储在 session 中并在 logout 时销毁 session 登录和注销工作正常 但我的问题是当用户注销并且我们按下后退按钮时 它仍然能够打开访问的页面 即使他实际上已注销 当我们刷新页面时 用户进入登
  • 如何让 sed 只更改每个字母的所有实例一次?

    到目前为止 代码只更改了第一个字母 如果我进行突破 那么它会多次更改字母的每个实例 这很糟糕 我只是尝试使用 sed 进行凯撒密码 我意识到我可以使用 tr 来执行文本转换 但我更愿意坚持使用 sed echo What number do