是否有可能在sed中操纵&符号?我想为文件中的所有数字添加+1。像这样:
sed -i "s/[0-9]\{1,2\}/$(expr & + 1)/g" filename
编辑:今天我使用grep和sed创建了一个循环来完成所需的工作。但是如果有人知道操纵&符号的方法,问题仍然存在,因为这不是我第一次在替换字符串上运行命令,而且 <。 / p>
答案 0 :(得分:2)
您可以使用e
修饰符来实现此目的:
$ cat test.txt
1
2
$ sed 's/^[0-9]\{1,2\}$/expr & + 1/e' test.txt
2
3
在这种情况下,您应该在替换部分中构造命令,该命令将被执行,结果将用于替换。
答案 1 :(得分:1)
sed将需要在每个行上使用一些shell命令(带'!')来执行此操作。
在这里你认为你正在调用sed然后回调shell来评估每行的 $(expr & + 1)
,但实际上并非如此。 $(expr & + 1)
只会被外壳静态评估(一次),并导致错误,因为'&amp;'不是那个时候的数字。
要实际执行此操作,请执行以下操作:
<强> hardcode all ten cases of last digit 0..9, as per this example in sed documentation 强>
使用以'1,$!'开头的sed命令来调用每一行的shell,并使用expr,awk,perl等执行增量。
脚注:我从来不知道php编码器显示的/e modifier。
答案 2 :(得分:1)
好问题。 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