gpt4 book ai didi

linux - 是否可以在 sed 地址中进行简单的算术运算?

转载 作者:太空狗 更新时间:2023-10-29 11:46:17 29 4
gpt4 key购买 nike

是否可以在 sed 地址中进行简单的算术运算?根据 "addresses" manual section 判断,答案似乎不是。但也许有解决方法?

例如,如何打印文件的倒数第二行?像这样的东西会很酷:

sed -n '$-1 p' file

但它显然不起作用...所以我通常必须进行多次 sed 调用,首先用于识别行,然后使用 shell $((expr)) 进行算术运算,然后最后再次调用 sed。像这样:

sed -n "$(($(sed -n '$ =' file)-1)) p" file

是否有“更好”、更紧凑、更易读的方法来使用 sed 地址进行算术运算?


严重拖延的时刻,决定写个小script that quickly changes the xterm colorscheme .这个想法是你有 .Xresources 一个带有开始标记和结束标记的文件:

...
START_MARKER
...
END_MARKER
...

并且您想删除标记之间的所有内容,但不删除标记本身。同样,做这样的事情会很棒:

sed '/START_MARKER/+1,/END_MARKER/-1 d' file

...但你不能!

最佳答案

你是对的,不能直接在 sed1 中进行数学计算,甚至是地址。但是你可以使用一些技巧来做你想做的事:

倒数第二行:

$ seq 5 | sed -n -e '${ # On the last line
> g # Replace the buffer with the hold space
> p # and print it
> }
> h' # All lines, store the current line in the hold space.
4

STARTEND 之间:

$ cat test.in
1
START
2
3
END
4
$ cat test.in | sed '/^START$/,/^END$/{
> /^START$/d
> /^END$/d
> p
> }
> d'
2
3
$ cat test.in | sed -n -e '/^START$/,/^END$/!d' -e '/^START/d' -e '/^END$/d' -e p
2
3

我正在使用 BSD (mac) sed;在 GNU 系统上,您可以在行之间使用 ; 而不是换行。或者将其粘贴到脚本中。

1:Sed 是图灵完备的,因此您可以进行数学运算,但充其量也很笨拙:http://rosettacode.org/wiki/A%2BB#sed

是的,我知道,UUOC;仅供引用

关于linux - 是否可以在 sed 地址中进行简单的算术运算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12334274/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com