在sed中操纵与

在sed中操纵与,sed,ampersand,Sed,Ampersand,是否可以在sed中操纵符号?我想给文件中的所有数字加+1。大概是这样的: sed -i "s/[0-9]\{1,2\}/$(expr & + 1)/g" filename 编辑:今天我使用grep和sed创建了一个循环,完成了所需的工作。但是,如果有人知道如何操作符号and,这个问题仍然存在,因为这不是我第一次想在替换字符串上运行命令,而且不能sed需要在每一行上发出一些shell命令(带“!”)来执行此操作 在这里,您认为您正在调用sed,sed然后调用shell来计算每行的$(ex

是否可以在sed中操纵符号?我想给文件中的所有数字加+1。大概是这样的:

sed -i "s/[0-9]\{1,2\}/$(expr & + 1)/g" filename

编辑:今天我使用grep和sed创建了一个循环,完成了所需的工作。但是,如果有人知道如何操作符号and,这个问题仍然存在,因为这不是我第一次想在替换字符串上运行命令,而且不能

sed需要在每一行上发出一些shell命令(带“!”)来执行此操作

在这里,您认为您正在调用sed,sed然后调用shell来计算每行的
$(expr&+1)
,但实际上它不是<代码>$(expr&+1)将由外壳静态计算(一次),并导致错误,因为“&”在该点不是一个数字

要真正做到这一点,请:

  • 使用以“1,$!”开头的sed命令在每一行上调用shell,并在那里使用expr、awk、perl或其他工具执行增量

  • 脚注:我从来都不知道php编码器显示的


  • 好问题。smci首先回答了问题,并且对贝壳的问题非常了解

    如果您想大体上解决这个问题,下面是一个示例中嵌入的Ruby解决方案(为了好玩):

    echo "hdf 4 fs 88\n5 22 sdf lsd 6" | ruby -e 'ARGF.each {|line| puts line.gsub(/(\d+)/) {|n| n.to_i+1}}'
    
    输出应该是

    hdf 5 fs 89\n6 23 sdf lsd 7
    

    您可以使用
    e
    修饰符来实现这一点:

    $ cat test.txt
    1
    2
    $ sed 's/^[0-9]\{1,2\}$/expr & + 1/e' test.txt
    2
    3
    

    在这种情况下,您应该在替换部件中构造命令,该命令将被执行,结果将用于替换。

    谢谢!我没有安装ruby!不值得只为这个安装!我不明白!像这样的?sed“1,$!”s/[0-9]\{1,2\}/'$(expr&+1)/g'文件名我现在无法访问UNIX shell,您必须对其进行一些操作。就快到了!该文件不仅包含数字。它也有括号,所以我得到:sh:Syntax error:(“未预料到的抱歉没有正确解释:内容是混合的:$vbx02->pack_start($hbx01);从来都不知道这个!它总是在sed中吗?@teresa-e-junior
    e
    在这种情况下不应该工作。(我认为最好是显示输入数据和期望的输出来说明问题。)@php编码器大多数代码行如下所示:
    $vbx02->pack_start($hbx01)
    $btn03=GtkButton::new_from_stock(Gtk::stock_CANCEL);