linux vim 查找或替换空格

本文介绍如何使用正则表达式进行文本处理,包括匹配、替换空格及删除空行等常见操作,并提供了具体的命令示例。

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

1.      匹配1到多个空格

 /\s\+

 

2.      替换一个或多个空格,替换为逗号,

:%s/\s\+/,/g

 

3.      替换一个或多个空格,替换为换行符

:%s/\s\+/\r/g

简单解释一下:
%s :在整个文件范围查找替换(或者使用1,$s 也是整个文件范围查找)
/ :分隔符
+ : +表示重复1次或多次,加在一起表示一个或多个空格。
\r :换行符
/g :全局替换

 

4.      删除文章中的空行

:g/^s*$/d
简单解释一下:
g :全区命令
/ :分隔符
^s*$ :匹配空行,其中^表示行首,s表示空字符,包括空格和制表符,*重复0到n个前面的字符,$表示行尾。连起来就是匹配只有空字符的行,也就是空行。
/d :删除该行

<think>我们正在讨论Linux中的#符号。根据用户提供的引用和问题,我们需要解释#符号在Linux中的不同含义和用法。注意,用户提到了引用[3]和[4],它们涉及C语言预处理器中的#和##,但用户的问题是关于Linux中的#符号。因此,我们需要区分不同上下文(如Shell脚本和C语言预处理)中的#符号。 在Linux中,#符号主要有两个不同的上下文:Shell脚本环境和C语言预处理环境(通常用于开发)。另外,在Shell提示符中,它也有特殊含义。 下面我将详细解释: ### 一、Shell脚本环境中的`#` 1. **注释符号** 在Shell脚本中,`#`用于添加单行注释,`#`之后的内容直到行尾都会被解释器忽略。 ```bash # 这是一条注释 echo "Hello" # 这也是注释 ``` 2. **脚本解释器指定(Shebang)** 在脚本的第一行,`#!`(称为Shebang)后面跟上解释器的绝对路径,用于指定执行该脚本的解释器。 ```bash #!/bin/bash echo "使用Bash执行" ``` ```bash #!/usr/bin/python3 print("使用Python3执行") ``` 3. **Root用户提示符** 在终端中,`#`是root用户的命令提示符(普通用户是`$`)。当用户以root身份登录时,命令提示符通常以`#`结尾,例如: ```bash root@hostname:~# ``` ### 二、C语言预处理中的`#`(开发相关) 在C/C++源代码中,`#`是预处理指令的起始符号,主要用于宏定义和条件编译。这里参考了用户提供的引用[3]和[4]。 1. **宏定义** `#define`用于定义宏: ```c #define PI 3.14159 ``` 2. **字符串化操作符(#)** 在宏定义中,`#`可以将宏参数转换为字符串字面量(引用[3])。 ```c #define STRINGIFY(x) #x // 使用:STRINGIFY(hello) 会被替换为 "hello" ``` 3. **连接操作符(##)** `##`用于将两个标识符连接成一个(引用[3])。 ```c #define CONCAT(a, b) a##b // 使用:CONCAT(var, 123) 会被替换为 var123 ``` 4. **其他预处理指令** 如`#include`、`#ifdef`、`#endif`等。 ### 三、特殊变量`$#`(Shell脚本) 虽然用户问的是`#`,但值得注意的是,在Shell脚本中,`$#`是一个特殊变量,表示传递给脚本函数的参数个数。例如: ```bash echo "参数个数: $#" ``` ### 总结表格 | 上下文 | 符号 | 含义/用途 | 示例 | |----------------|-------|------------------------------------|-------------------------------| | Shell脚本 | `#` | 单行注释 | `# 注释内容` | | Shell脚本 | `#!` | Shebang(指定解释器) | `#!/bin/bash` | | Shell终端 | `#` | Root用户提示符 | `root@host:~#` | | C语言预处理 | `#` | 预处理指令起始符 | `#include <stdio.h>` | | C语言宏 | `#` | 字符串化操作符 | `#define STR(x) #x` | | C语言宏 | `##` | 连接操作符 | `#define CON(a,b) a##b` | | Shell脚本 | `$#` | 参数个数 | `echo "参数个数: $#"` | ### 注意事项 1. 在Shell脚本中,`#`作为注释时,必须是一行的第一个非空白字符(除了Shebang)者在命令后的空格之后。 2. Shebang必须是文件的第一行,且必须是前两个字符`#!`。 3. 在C语言预处理器中,`#`必须在一行的开头(忽略空格)才能被识别为预处理指令。 > 示例:综合使用 > ```bash > #!/bin/bash > # 这是脚本注释 > echo "当前用户: $USER" > echo "参数数量: $#" > ``` --- §§相关问题§§ 1. Shebang 在 Linux 脚本中的工作原理是什么? 2. 如何在 Shell 脚本中编写多行注释? 3. C 语言宏中 `#` 和 `##` 运算符有哪些实际应用场景?[^3] 4. 为什么 root 用户的命令提示符使用 `#` 符号? 5. 在 Shell 脚本中如何获取传递给函数参数的个数?</think>### Linux 中 `#` 符号的作用与含义详解 `#` 符号在 Linux 的不同场景中有多种关键作用,主要分为 **Shell 环境** 和 **C 语言预处理** 两大领域: --- #### 一、Shell 脚本环境中的核心作用 1. **注释符号** 在脚本中标记注释内容,`#` 后的所有字符会被解释器忽略: ```bash # 这是单行注释(不会执行) echo "Hello" # 行内注释(只忽略#之后内容) ``` 2. **Shebang 指令** 脚本首行 `#!` 指定解释器路径(不可省略): ```bash #!/bin/bash # 使用 Bash 解释器 #!/usr/bin/python # 使用 Python 解释器 ``` 3. **Root 用户提示符** 在终端中标识 root 权限用户(普通用户是 `$`): ```bash user@host:~$ # 普通用户 root@host:~# # root 用户(注意结尾符号) ``` 4. **特殊变量 `$#`** 表示传递给脚本函数的参数个数: ```bash echo "参数数量: $#" # 输出如:参数数量: 3 ``` --- #### 二、C 语言预处理中的关键作用(开发相关) 1. **预处理指令标识符** 所有预处理指令必须以 `#` 开头: ```c #include <stdio.h> // 头文件包含 #define PI 3.14 // 宏定义 #ifdef DEBUG // 条件编译 ``` 2. **字符串化操作符(#)** 将宏参数转换为字符串字面量(引用[3]): ```c #define STR(x) #x printf("%s", STR(hello)); // 输出 "hello" ``` 3. **连接操作符(##)** 拼接两个标识符(引用[3][4]): ```c #define CONCAT(a,b) a##b int var1 = 10; printf("%d", CONCAT(var,1)); // 输出 var1 的值 (10) ``` 4. **变长参数处理(__VA_ARGS__)** 配合 `#` 实现可变参数宏(引用[4]): ```c #define LOG(...) printf(#__VA_ARGS__) LOG(Error: file not found); // 展开为 printf("Error: file not found"); ``` --- ### 关键区别总结 | 场景 | 符号形式 | 作用 | 示例 | |--------------|----------|--------------------------|--------------------------| | Shell 脚本 | `#` | 注释行 | `# 配置信息` | | Shell 脚本 | `#!` | 解释器声明 | `#!/bin/bash` | | Shell 终端 | `#` | root 提示符 | `root@server:~#` | | C 预处理 | `#` | 字符串化 | `#define STR(x) #x` | | C 预处理 | `##` | 标识符连接 | `#define CONCAT(a,b) a##b` | > **典型应用示例** > ```bash > #!/bin/bash > # 脚本功能:参数计数器 > echo "共收到 $# 个参数" # 使用 $# 获取参数数量 > ``` > ```c > /* C 宏的高级用法 */ > #define DEBUG_LOG(fmt, ...) printf("[DEBUG] " #fmt "\n", ##__VA_ARGS__) > DEBUG_LOG(Connection established); // 输出: [DEBUG] Connection established > ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值