gpt4 book ai didi

sed - 如何理解带有复杂替换的 sed?

转载 作者:行者123 更新时间:2023-12-01 04:34:34 29 4
gpt4 key购买 nike

例如:

  sed 's@/lib\(64\)\?\(32\)\?/ld@/tools&@g' abc.txt

's@' 、 '(' 、 '\?' 、'&' 和 '@' 等含义是什么?

如何找到最合适最简单的sed学习方法?

abc.txt:

  #define GNU_USER_LINK_EMULATION32 "elf32%{EB:b}%{EL:l}tsmip"
#define GNU_USER_LINK_EMULATION64 "elf64%{EB:b}%{EL:l}tsmip"
#define GNU_USER_LINK_EMULATIONN32 "elf32%{EB:b}%{EL:l}tsmipn32"

#define GLIBC_DYNAMIC_LINKER32 "/lib/ld.so.1"
#define GLIBC_DYNAMIC_LINKER64 "/lib64/ld.so.1"
#define GLIBC_DYNAMIC_LINKERN32 "/lib32/ld.so.1"
#define UCLIBC_DYNAMIC_LINKERN32 "/lib32/ld-uClibc.so.0"
#define BIONIC_DYNAMIC_LINKERN32 "/system/bin/linker32"
#define GNU_USER_DYNAMIC_LINKERN32 \
CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKERN32, UCLIBC_DYNAMIC_LINKERN32, \
BIONIC_DYNAMIC_LINKERN32)

谢谢~

最佳答案

手册是一个很好的起点 http://www.gnu.org/software/sed/manual/sed.html

分解那个特定的命令:

sed 's@/lib\(64\)\?\(32\)\?/ld@/tools&@g' abc.txt

引号中的字符串's@/lib\(64\)\?\(32\)\?/ld@/tools&@g'是sed运行的单参数命令,在本例中是“s”(“替代”)命令 http://www.gnu.org/software/sed/manual/sed.html#The-_0022s_0022-Command

那里使用的分隔符是 @ 符号,所以正则表达式是 /lib\(64\)\?\(32\)\?/ld 替换是 /tools& 。末尾有一个 'g' 选项,它适用于每一行中的所有匹配项,而不仅仅是第一行。

对于正则表达式,\(\) 分隔一个捕获组,\? 表示“可选地匹配前面的原子(匹配零次或一次)”(前一个原子是那个组)。其余字符按原样匹配,所以这意味着它将匹配 /lib/ld/lib64/ld/lib32/ld/lib6432/ld

在替换中,& 包括整个匹配项,因此有效地为所有匹配项加上前缀 /tools

关于sed - 如何理解带有复杂替换的 sed?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14421940/

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