将部分模式从 sed 传递到 shell

2023-12-19

我有一个文件,其中包含以下格式的行:

w1#1#x w2#4#b w3#2#d ...

该行中的每个单词(标记)(例如 w1#1#x)由 3 部分组成,第一个部分显示某个索引(本例中为 w1),第二个是整数(本例中为 1),第三个是一个字符(在本例中为 x)

现在,对于每个单词(标记),我需要打印一个附加字段,该字段将根据第二部分和第三部分的值进行计算(i.e.,第四部分将是第二部分和第三部分的函数),输出文件应如下所示:

w1#1#x#f1 w2#4#b#f2 w3#2#d#f3 ...

where

f1 = 函数(1,x), f2 = 函数(4,b), f3 = 函数(2,d)

现在,使用 sed 模式我可以识别每个单词(标记)中的组件,e.g.,

回显 $line | sed "s/([^#])#([^#])#([^# ]*) /\1#\2#\3 /g"

其中 \2 和 \3 是图案的部分(我打电话给他们图案的部分因为这个链接 http://www.grymoire.com/Unix/Sed.html#uh-4)

现在,我需要使用 \2 和 \3 计算第四部分。我定义了一个 shell 函数 getInfo() ,它接受 2 个参数并执行所需的计算并返回第四部分。问题是在 sed 命令中插入这个函数。我尝试了以下操作:

回显 $line | sed "s/([^#])#([^#])#([^# ]*) /\1#\2#\3`getInfo \2 \3` /g"

但这不起作用。外壳没有收到图案的部分作为参数。

所以问题是:

如何通过sed图案的部分到外壳(函数)?

我可以轻松地编写一个 shell 脚本,它将逐字分割行并执行所需的工作,然后将文件缝合回来,但如果 shell 可以接收图案的部分作为 sed 命令中 sed 的参数。

Regards,

萨利尔·乔希


这可能对你有用:

func(){ echo "$1#$2#$3#$2$3"; }
export -f func
echo "w1#1#x w2#4#b w3#2#d" |
sed 's/\([^#]*\)#\([^#]*\)#\([^ ]*\) \?/echo -n "$(func \1 \2 \3) "; /g;s/$/echo ""/' |
sh
w1#1#x#1x w2#4#b#4b w3#2#d#2d 

或者如果你有 GNU sed:

func(){ echo "$1#$2#$3#$2$3"; }
export -f func
echo "w1#1#x w2#4#b w3#2#d" |
sed 's/\([^#]*\)#\([^#]*\)#\([^ ]*\) \?/echo -n "$(func \1 \2 \3) "; /ge;s/.$//'
w1#1#x#1x w2#4#b#4b w3#2#d#2d
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将部分模式从 sed 传递到 shell 的相关文章

  • 是否可以为我的 Linux 函数复制命令的制表符补全?

    假设我有一个名为的 bash shell 函数magic 我想定义一个制表符补全功能 magic这将允许magic搭载任何给定命令的选项卡完成功能 如果可用 换句话说 我想要magic能够做这样的事情 magic git
  • 使用 unix ksh shell 脚本或 perl 脚本监视文件夹中的新文件并触发 perl 脚本

    我已经在谷歌搜索和溢出了一段时间 但找不到任何可用的东西 我需要一个脚本来监视公共文件夹并在创建新文件时触发 然后将文件移动到私有位置 我有一个 samba 共享文件夹 exam ple 在 UNIX 上映射到X 在窗户上 在某些操作中 t
  • 为什么 ls -l 中的“总计”加起来不等于列出的总文件大小? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 为什么是total在输出中ls l打印为64并不是26078列出的所有文件的总数是多少 ls l test ls total 64 rw
  • 我收到错误“array.sh:3:array.sh:语法错误:”(“意外”

    我编写了以下代码 bin bash Simple array array 1 2 3 4 5 echo array 我收到错误 array sh 3 array sh 语法错误 意外 根据我从 Google 了解到的情况 这可能是因为 Ub
  • Linux 从设备本身运行的脚本卸载设备

    我在路径中安装了一个 iso 映像 mnt iso 在这个 iso 中我有一个安装脚本 install sh 我从 iso 运行安装脚本 最后脚本询问用户是否要卸载 iso 本身 如果用户按 y 脚本将执行以下代码 cd umount mn
  • 在多个文件中进行查找/替换的最佳方法?

    最好的方法是什么 我不是命令行战士 但我想可能有一种使用方法grep and cat 我只想替换文件夹和子文件夹中出现的字符串 最好的方法是什么 如果这很重要的话 我正在运行 ubuntu 我将为使用的人提供另一个例子ag 银色搜索者 ht
  • shell 脚本中的 Telnet

    如何在 shell 脚本中运行 telnet 并在远程服务器上执行命令 出于安全原因 我没有在我的Solaris 机器上安装expect 我也没有perlnet telnet模块已安装 那么如果不使用expect和perl我该怎么办呢 我尝
  • MongoDB - 编辑器变量 - MongoDB shell - Windows 7

    EDITOR 变量功能真的可以在 Windows 7 上使用吗 我正在读一篇文章 说一旦我们设置了 EDITOR 变量在 mongorc js 中 我们只需在 shell 中输入 编辑变量名 and var name将被加载到编辑器中 在我
  • linux + ksh + 向下舍入或向上舍入 - 浮点数

    在我的 ksh 脚本中 我只需要计算整数 有时我会得到浮点数 例如 3 49 或 4 8 等 所以我需要根据以下规则将浮点数转换为整数 示例 3 49 will be 3 2 9 will be 3 4 1 will be 4 23 51
  • 如何使用 echo 命令写入并附加到文件

    我正在尝试编写一个脚本 它将使用 echo 并写入 附加到文件 但我的语法中已经有了 字符串 说 echo I am Finding difficult to write this to file gt file txt echo I ca
  • 在ubuntu中打开spyder

    我想在ubuntu中打开spyder Python IDE 通常我会在 shell 中编写 spyder 它会打开spyder IDE 现在 当我在shell中编写spyder时 它只是换行 什么也没有发生 类似于按 enter 我如何找回
  • 有哪些基于对象的 shell?

    我打算写一个面向对象的shell 基于Python 我已经有很多想法了 但在实现它之前 我想通过一些现有的 shell 来激发我的灵感 我所说的面向对象的基本意思是 参数不仅仅是字符串数组 而且是对象数组 返回值也是一个对象 不仅有 std
  • 退出代码大于 255 — 可能吗?

    如果是 在哪个操作系统 shell 或其他操作系统上 考虑以下 Java 程序 我使用 Java 只是作为示例 任何语言都适合这个问题 这更多地与操作系统有关 public class ExitCode public static void
  • 正则表达式删除块注释也删除 * 选择器

    我正在尝试使用 bash 从 css 文件中删除所有块注释 我有以下 sed 命令的正则表达式 sed r s w s w d 这可以很好地去除块注释 例如 This is a comment this is another comment
  • 将以反斜杠结尾的行与下一行 awk 连接起来(来自著名的 awk 单行解释)

    这个练习来自于Peteris Krumins 的博客文章解释了 AWK 的俏皮话 http www catonmat net blog awk one liners explained part two 本质上是这条线 awk sub ge
  • 如何从 ssh 配置文件中删除主机条目?

    文件的标准格式是 Host example HostName example com Port 2222 Host example2 Hostname two example com Host three example com Port
  • 使用 sed 删除大括号对之间的所有内容

    我有一个看起来像这样的字符串 B F blue master F red f k b f k b K black B F green 我想删除匹配的子字符串 它可能包含也可能不包含相同顺序的其他子字符串 我应该得到 master 作为最终输
  • shell中如何分割字符串

    我有一个变量作为 string ABC400p2q4 我怎样才能分开ABC400 and p2q4 我需要将它分成两个变量 结果我得到 echo var1 ABC400 echo var2 p2q4 可以用任何字母字符代替 ABC 可以用任
  • 检查帐号是否为数字时出现语法错误

    if account nr 0 9 from account nr 0 9 这是为了检查帐号是否为数字 我收到语法错误 这个问题的早期版本缺少之间的空格if and 实际代码具有所需的空间 它显示以下错误消息 syntax error ac
  • 在 VBA 中捕获 shell 命令的输出值?

    发现这个功能http www cpearson com excel ShellAndWait aspx http www cpearson com excel ShellAndWait aspx 但我还需要捕获 shell 的输出 有什么代

随机推荐

  • ServiceStack 返回 JSV 而不是 JSON

    我有一个使用 ServiceStack 创建的服务 最近我更新了 ServiceStack 库 现在我收到的是 JSV 响应而不是 JSON 响应 该请求看起来像 POST http localhost api rest poll crea
  • 如何阻止用户在 XPages 中打开新的浏览器会话

    我有一个前端文档锁定过程 它创建一个包含 UNID 用户名 时间的应用程序范围变量 然后是一个每 30 秒更新此信息的计时器 如果有人尝试打开文档进行编辑 我会检查 使用 UNID 看看其他人是否拥有该文档 如果时间大于 30 秒 我会取消
  • 点击没有 jQuery UI 的 jQuery 弹跳效果

    我找不到仅使用 jQuery 动画来制作 div 弹跳的动画解决方案 类似的东西不起作用 bounce click function this effect bounce times 3 300 我不想使用 jQuery UI 或任何外部插
  • php正则表达式读取选择表单

    我有一个带有选择表单的源文件 其中包含一些选项 如下所示
  • 需要工作但导入不工作

    我有一个 actions js 文件正在导出这样的操作 export var toggleTodo id gt return type TOGGLE TODO id 但是当我使用 es6 import 导入它时出现错误 Uncaught T
  • 如何动态地将分支目标提示到 x64 CPU?

    我想知道如何用 C C 或汇编语言为 x64 处理器编写高效的跳转表 输入是预先已知的 但不可能通过算法来预测 假设我可以在输入流中查看尽可能远的位置 有什么方法可以动态地告诉 CPU 下一个分支将转到哪个地址 本质上 我想以编程方式更新分
  • 没有模板引擎的 Node.js

    我是 Node js 新手 正在尝试学习 据我了解 使用模板引擎 例如 Jade 是很常见的 甚至对于 CSS 例如 Stylus 也是如此 老实说 我见过的所有教程在布局方面都涉及模板引擎 问题是我不想使用模板引擎 因为我认为它不必要地复
  • javascript客户端到Python服务器:获取请求后XMLHttpRequest响应文本为空

    我正在尝试编写一个 chrome 扩展 它能够向 python 服务器脚本发送 接收数据 目前 我正处于 js 脚本发出 GET 请求的阶段 唯一的问题是 responseText 始终为空 即使 python 脚本以文本响应 popup
  • 高质量图像缩放库[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想在 C 中缩放图像 其质量级别与 Photoshop 一样好 有没有任何 C 图像处理库可以完成这项工作 这是一个注释良好的图像操作帮
  • For循环不推断无符号整数[重复]

    这个问题在这里已经有答案了 根据 F 中 for to 循环的 MSDN 文档 标识符的类型是从开始和结束表达式的类型推断出来的 这些表达式的类型必须是 32 位整数 但是 使用下面的代码 我收到以下编译时错误 for bar 0u to
  • 在 php 中使用 jquery 每 5 秒更改图片 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 请帮助我 我是 jQuery 新手 这是我的代码 img src default jpg img src a jpg img src b
  • 避免模​​块名称修改的干净方法?

    我正在使用 Python 的 ctypes 来连接 C 库文件 运行类型基因 http code google com p ctypesgen 创建一个我可以导入的包装模块 例如 api py 许多 C 函数和宏的名称都以双下划线开头 Py
  • 将 Ajax/UI JS 框架(ext、jquery-ui)与 MVC PHP 框架(zend、symfony)结合起来是个好主意吗?

    我意识到这是一个非常普遍的问题 但我想我并不是真的在寻找明确的答案 作为 PHP 框架的新手 我很难理解它 Javascript 框架 尤其是 UI 扩展 似乎有类似 MVC 的方法 将 JS 代码与设计分开 在后端使用额外的 MVC 框架
  • 为什么 std::map 需要一个运算符< 以及如何编写一个

    我正在使用 std map 库 我试图将一堆数据放入地图中 我创建了一个地图来保存日期 time t 和浮点数 但是当我尝试添加它们时 我的编译器告诉我 错误 与 operator 我尝试创建一个重载的 这是我正在运行它的类 class M
  • 对 Material UI Select 组件的更改做出反应测试库

    我正在尝试测试onChange的事件选择组件 https material ui com api select using 反应测试库 https github com kentcdodds react testing library 我使
  • PowerShell:更改文件夹或文件的时间戳(创建日期)

    对于 Windows 10 上的 PowerShell 命令 我遇到了奇怪的行为 要更改文件的创建日期 我使用 Get ChildItem C testFile1 txt CreationTime 01 11 2005 06 00 36 要
  • jQuery/原型冲突

    我正在使用 jQuery hoverIntent js 脚本来构建大型下拉菜单系统 其灵感来自于 Son Tonaka 的大型下拉菜单 w CSS 和 jQuery sohtanaka com web design mega drop do
  • List 抛出 ConcurrentModificationException 但 set 不抛出 ConcurrentModificationException? [复制]

    这个问题在这里已经有答案了 我有以下两个java类 import java util public class ArrayListTest032 public static void main String ar List
  • 防止网页抓取

    我目前是开发一个应用程序的团队的一员 该应用程序包括前端客户端 通过这个客户端 我们发送用户数据 每个用户都有一个用户 ID 客户端通过 RESTful API 与我们的服务器对话 向服务器请求数据 例如 假设我们有一个书籍数据库 用户可以
  • 将部分模式从 sed 传递到 shell

    我有一个文件 其中包含以下格式的行 w1 1 x w2 4 b w3 2 d 该行中的每个单词 标记 例如 w1 1 x 由 3 部分组成 第一个部分显示某个索引 本例中为 w1 第二个是整数 本例中为 1 第三个是一个字符 在本例中为 x