sed 之 \1-9 的作用

本文介绍sed命令中1-9的功能及应用,通过实例展示如何利用这些功能进行字符串匹配与替换,包括如何颠倒字符串顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

sed 之 \1-9 的作用

  • \1 就代表被匹配到的第一个模式,sed 一共可以记录9个模式。这些模式在某些场景下会非常有用,下面就介绍一下怎样使用。
  • 模式? 就是正则表达式用 () 扩起来的内容
  • 命令行模式下用到了转义字符 \( 和 \)
    先看一行命令:
[www@]$ echo hello123|sed "s/\([a-z]*\).*/\1/"
hello

这里我们看到的是正则匹配到的部分是 hello 这个字符串,替换的模式里面是 \1 , 那么 \1 实际上代表的就是 hello 这个字符串,接下来我们看另外一行命令:

[www@]$ echo hello123|sed 's/\([a-z]*\)\([0-9]\{3\}\)/\2\1/'
123hello

看到没? 本来应该输出 hello123 的,现在被替换成了123hello
这行命令里面有两个模式 ([a-z]*) 对应的是 \1 模式1
([0-9]{3}) 对应的是 \2 模式2, 最后替换的内容里面 \2\1 代表的是
模式2 放到模式1 的前面,这就达到了颠倒字符串的目的。

这样是不是很有趣,记住现在是sed最多可以记录9个模式。

sed@sed-VMware-Virtual-Platform:~/gui/linux$ cat -A Makefile # Cross-compilation Toolchain Configuration$ CROSS_COMPILE = arm-linux-gnueabihf-$ CC = $(CROSS_COMPILE)gcc$ CXX = $(CROSS_COMPILE)g++$ $ # Project Configuration$ TARGET = demo$ BUILD_DIR = ./build$ BUILD_OBJ_DIR = $(BUILD_DIR)/obj$ BUILD_BIN_DIR = $(BUILD_DIR)/bin$ $ # LVGL Configuration$ LVGL_DIR_NAME = lvgl$ LVGL_DIR = . # M-eM-^AM-^GM-hM-.M->LVGLM-dM-=M-^MM-dM-:M-^NM-iM-!M-9M-gM-^[M-.M-fM- M-9M-gM-^[M-.M-eM-=M-^U$ $ # Source Files Configuration$ ## Main Application$ MAINSRC = ./main.c$ MY_GUI_SRC = ./my_gui.c$ MY_GUI_HEADER = ./my_gui.h$ $ ## GPIO Component$ GPIO_DIR = ./gpio$ GPIO_SRC = $(GPIO_DIR)/gpio.c$ GPIO_HEADER = $(GPIO_DIR)/gpio.h$ $ ## LVGL Core (M-iM-^@M-^ZM-hM-?M-^Glvgl.mkM-hM-^GM-*M-eM-^JM-(M-fM-7M-;M-eM-^JM- )$ include $(LVGL_DIR)/lvgl/lvgl.mk$ include $(LVGL_DIR)/lv_drivers/lv_drivers.mk$ $ # M-eM-^PM-^HM-eM-9M-6M-fM-^IM-^@M-fM-^\M-^IM-fM-:M-^PM-fM-^VM-^GM-dM-;M-6$ CSRCS += $(MAINSRC) $(MY_GUI_SRC) $(GPIO_SRC)$ $ # Path Configuration$ INCLUDES = -I. \$ -I$(LVGL_DIR)/ \$ -I$(GPIO_DIR) \$ -I$(LVGL_DIR)/lvgl \$ -I$(LVGL_DIR)/lv_drivers$ $ LIBS = -L$(GPIO_DIR)/source/lib -lgpiod$ $ # Compiler Flags$ CFLAGS = -Wall -Werror -O3 -g0 $(INCLUDES) -std=gnu99$ LDFLAGS = -static $(LIBS) -Wl,--start-group -lc -lm -Wl,--end-group$ $ # Object Files Handling$ OBJEXT = .o$ COBJS = $(CSRCS:.c=$(OBJEXT))$ OBJS = $(addprefix $(BUILD_OBJ_DIR)/, $(notdir $(COBJS)))$ $ vpath %.c $(sort $(dir $(CSRCS))) # M-hM-^GM-*M-eM-^JM-(M-eM-$M-^DM-gM-^PM-^FM-eM-$M-^ZM-gM-^[M-.M-eM-=M-^UM-fM-:M-^PM-fM-^VM-^GM-dM-;M-6$ $ # Build Targets$ all: $(BUILD_BIN_DIR)/$(TARGET)$ $ $(BUILD_OBJ_DIR)/%.o: %.c $(MY_GUI_HEADER) $(GPIO_HEADER)$ ^I@mkdir -p $(@D)$ ^I$(CC) $(CFLAGS) -c $< -o $@$ ^I@echo "CC $<"$ $ $(BUILD_BIN_DIR)/$(TARGET): $(OBJS)$ ^I@mkdir -p $(@D)$ ^I$(CC) $^ -o $@ $(LDFLAGS)$ ^I@echo "Build complete: $@"$ $ clean:$ ^Irm -rf $(BUILD_DIR)$ ^I@echo "Clean complete"$ $ .PHONY: all cleansed@sed-VMware-Virtual-Platform:~/gui/linux$ make clean make: *** .: 是一个目录。 停止。 sed@sed-VMware-Virtual-Platform:~/gui/linux$ * 还原的历史记录 sed@sed-VMware-Virtual-Platform:~/gui/linux$ make make: *** .: 是一个目录。 停止。 sed@sed-VMware-Virtual-Platform:~/gui/linux$ make clean make: *** .: 是一个目录。 停止。 sed@sed-VMware-Virtual-Platform:~/gui/linux$ sed@sed-VMware-Virtual-Platform:~/gui/linux$ sed@sed-VMware-Virtual-Platform:~/gui/linux$ sed@sed-VMware-Virtual-Platform:~/gui/linux$ sed@sed-VMware-Virtual-Platform:~/gui/linux$ sed@sed-VMware-Virtual-Platform:~/gui/linux$ mak
05-14
05-21
### 使用 `sed` 命令的 `-e` 选项 #### 功能描述 `sed -e` 选项允许用户直接在命令行中定义多个编辑操作。通过该选项,可以在单次调用中执行一系列连续的动作,而无需创建单独的脚本文件[^3]。 当使用 `-e` 时,每个动作会被依次应用到输入流中的每一行。这使得复杂编辑任务更加简洁高效,尤其适合需要多次替换或其他操作的情况[^4]。 --- #### 示例代码及其解释 以下是几个典型的 `sed -e` 实例: ##### 示例 1:简单字符串替换 ```bash echo "hello world" | sed -e &#39;s/hello/A/&#39; ``` 此命令将标准输入中的单词 `"hello"` 替换为字母 `"A"`。最终输出结果为: ``` A world ``` 这里仅有一个替换操作,因此也可以省略 `-e` 而直接书写成 `sed &#39;s/hello/A/&#39;`[^1]。 --- ##### 示例 2:多重替换 ```bash echo "hello world" | sed -e &#39;s/hello/A/; s/world/B/&#39; ``` 这条命令实现了两个独立的操作:先将 `"hello"` 替换成 `"A"`,再把 `"world"` 替换成 `"B"`。最终输出如下所示: ``` A B ``` 注意,在同一个 `sed` 运行过程中可以通过分号 (`;`) 隔开不同动作实现链式效果[^2]。 --- ##### 示例 3:结合地址范围限定作用域 假设我们有一份包含多行文本的文档,并希望只针对某些特定区间内的内容做修改,则可利用行号作为条件约束。 ```bash seq 5 | sed -e &#39;2,4{s/[0-9]/X/}&#39; ``` 上述语句会对第 2 至第 4 行里的任意数字字符替换成大写字母 X 。其预期打印应形如这样: ``` 1 XX XX XX 5 ``` 此处展示了如何配合地址范围 (address range),进一步细化控制哪些部分接受变换影响[^3]。 --- ##### 示例 4:组合多种功能 下面的例子演示了在同一管道里既删除空白行又调整大小写的综合技巧。 ```bash cat file.txt | sed -e &#39;/^$/d&#39; -e &#39;y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/&#39; ``` 它首先移除所有纯空格构成的记录项(`/^$/d`) ,接着转换剩余每条非空纪录的小写字母成为对应的大写形式(`y///`) [^3]. --- ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值