linux sed 命令 删除 替换指定字符 字符串 大小写转换

本文介绍了使用Shell脚本进行字符串大小写转换、字符替换及文件搜索替换的实用技巧,包括利用awk进行大小写转换,sed命令进行字符或字符串的替换,并展示了如何批量修改文件中的特定字符串。

1.字符串 大小写转换

awk

toupper 小写转大写
tolower 大写转小写。


~ # cat /etc/firmware/nvram.txt | grep mac 
macaddr=00:90:4c:c5:12:38
~ # cat /etc/firmware/nvram.txt | grep mac | awk -F '=' '{print toupper($2)}'
00:90:4C:C5:12:38
~ # 


2.字符被替换为空

  sed 's/被替换的字符//g'  

删除 -,空格,:,特殊字符

~ # echo "2006-11-21 22:16:30" | sed 's/-//g' 
20061121 22:16:30
~ # echo "2006-11-21 22:16:30" | sed 's/ //g' 
2006-11-2122:16:30
~ # echo "2006-11-21 22:16:30" | sed 's/://g'
2006-11-21 221630
~ # 
~ # echo "2006-11-21 22:16:30" | sed 's/-//g' | sed 's/ //g' | sed 's/://g'
20061121221630
~ # 
~ # 


将当前目录下包含hello串的文件中,hello字符串替换为hi

sed -i "s/hello/hi/g" `grep "hello" -rl ./`

将某个文件中的hello字符串替换为h

sed -i "s/hello/hi/g" test.txt

删除行首空格

sed -i 's/^ //g' test

删除行尾空格

sed -i 's/ $//g' test

FormUrl

<think> 在Linux系统中,有多种命令可以用于字符串大小写转换。以下是一些常用的方法: ### 1. 使用 `tr` (translate) 命令 `tr` 命令可以用于转换或删除字符。它支持大小写转换。 **转换为大写:** ```bash echo "hello world" | tr '[:lower:]' '[:upper:]' # 输出: HELLO WORLD ``` **转换为小写:** ```bash echo "HELLO WORLD" | tr '[:upper:]' '[:lower:]' # 输出: hello world ``` ### 2. 使用 `awk` 命令 `awk` 是一个强大的文本处理工具,它内置了大小写转换函数。 **转换为大写:** ```bash echo "hello world" | awk '{print toupper($0)}' # 输出: HELLO WORLD ``` **转换为小写:** ```bash echo "HELLO WORLD" | awk '{print tolower($0)}' # 输出: hello world ``` ### 3. 使用 `sed` 命令 `sed` 是流编辑器,也可以用来转换大小写,但注意 `sed` 本身并不直接支持大小写转换,需要结合标签(GNU扩展)。 **GNU sed 转换为大写:** ```bash echo "hello world" | sed -e 's/.*/\U&/' # 输出: HELLO WORLD ``` **GNU sed 转换为小写:** ```bash echo "HELLO WORLD" | sed -e 's/.*/\L&/' # 输出: hello world ``` 注意:`\U` 和 `\L` 是 GNU sed 的扩展,在非 GNU 系统上可能不可用。 ### 4. 使用 `perl` 命令 Perl 是一种高级编程语言,常用于文本处理。 **转换为大写:** ```bash echo "hello world" | perl -ne 'print uc' # 输出: HELLO WORLD ``` **转换为小写:** ```bash echo "HELLO WORLD" | perl -ne 'print lc' # 输出: hello world ``` ### 5. 使用 `bash` 内置字符串操作 (仅限 Bash 4.0+) 在 Bash 4.0 及以上版本中,支持内置的字符串大小写转换。 **转换为大写:** ```bash str="hello world" echo "${str^^}" # 输出: HELLO WORLD ``` **转换为小写:** ```bash str="HELLO WORLD" echo "${str,,}" # 输出: hello world ``` **仅首字母大写:** ```bash str="hello world" echo "${str^}" # 输出: Hello world ``` **每个单词首字母大写:** ```bash str="hello world" echo "${str~~}" # 或者使用: echo "${str^} ${str^^}" 分割单词处理(不直接支持) # 更实用的方法(使用变量扩展不支持,但可以结合循环) ``` 注意:Bash 的内置方法对于整个字符串转换非常方便,但不支持单词级别的转换(如标题格式)。可以使用其他工具如 `awk` 来实现。 ### 6. 使用 `dd` 命令(不常用) `dd` 命令通常用于转换和拷贝文件,但也可以用于大小写转换(虽然不直观)。 **转换为大写:** ```bash echo "hello" | dd conv=ucase 2>/dev/null # 输出: HELLO ``` 注意:这种方法只能用于单个单词,并且会吞掉空格,因此不推荐用于句子。 ### 7. 使用 `python` 命令 如果系统安装了 Python,可以使用 Python 进行大小写转换。 **转换为大写:** ```bash echo "hello world" | python -c "print(input().upper())" ``` **转换为小写:** ```bash echo "HELLO WORLD" | python -c "print(input().lower())" ``` ### 总结表格 | 方法 | 转换大写 | 转换小写 | 特点 | |------|----------|----------|------| | `tr` | `tr '[:lower:]' '[:upper:]'` | `tr '[:upper:]' '[:lower:]'` | 简单,POSIX 标准 | | `awk` | `awk '{print toupper($0)}'` | `awk '{print tolower($0)}'` | 功能强大,支持复杂文本处理 | | `sed` (GNU) | `sed 's/.*/\U&/'` | `sed 's/.*/\L&/'` | GNU扩展,非POSIX标准 | | `perl` | `perl -ne 'print uc'` | `perl -ne 'print lc'` | 需要安装Perl | | Bash 4.0+ | `${str^^}` | `${str,,}` | 内置支持,无需外部命令 | | `python` | `python -c "print(input().upper())"` | `python -c "print(input().lower())"` | 需要安装Python | ### 示例脚本:转换文件内容大小写 将文件内容转为大写: ```bash tr '[:lower:]' '[:upper:]' < input.txt > output.txt ``` 将文件内容转为小写: ```bash tr '[:upper:]' '[:lower:]' < input.txt > output.txt ``` §§相关问题§§: 1. 如何在Bash脚本中将字符串的每个单词首字母大写? 2. 使用`tr`命令时,如何处理非ASCII字符(如带重音符号的字符)的大小写转换? 3. 在Linux中,如何批量重命名文件名为小写? 4. 如何使用`awk`将CSV文件中的特定列转换为大写? </think> 在 Linux 系统中,有多种命令可以用于字符串大小写转换。以下是常用的方法及其详细说明: ### 1. **`tr` (translate) 命令** 最常用的文本处理工具之一,用于字符替换删除。 **转换为大写:** ```bash echo "hello world" | tr '[:lower:]' '[:upper:]' # 输出:HELLO WORLD ``` **转换为小写:** ```bash echo "HELLO WORLD" | tr '[:upper:]' '[:lower:]' # 输出:hello world ``` **特点:** - POSIX 标准,所有 Linux 系统都支持 - 只能处理单字节字符(不支持 Unicode) - 简单高效 ### 2. **`awk` 命令** 强大的文本处理工具,支持内置的大小写转换函数。 **转换为大写:** ```bash echo "hello world" | awk '{print toupper($0)}' # 输出:HELLO WORLD ``` **转换为小写:** ```bash echo "HELLO WORLD" | awk '{print tolower($0)}' # 输出:hello world ``` **特点:** - 支持字段级别的处理(如转换特定列) - 可以处理更复杂的文本转换 - 同样无法处理 Unicode 字符 ### 3. **`sed` 命令** 流编辑器,支持正则表达式转换(需要 GNU sed)。 **转换为大写:** ```bash echo "hello world" | sed 's/.*/\U&/' # 输出:HELLO WORLD ``` **转换为小写:** ```bash echo "HELLO WORLD" | sed 's/.*/\L&/' # 输出:hello world ``` **注意:** `\U` 和 `\L` 是 GNU sed 扩展,在 macOS 等 BSD 系统上不可用。 ### 4. **Bash 原生字符串操作 (Bash 4.0+)** 使用 Bash 内置的字符串操作功能。 **转换为大写:** ```bash str="hello world" echo "${str^^}" # 输出:HELLO WORLD ``` **转换为小写:** ```bash str="HELLO WORLD" echo "${str,,}" # 输出:hello world ``` **首字母大写:** ```bash str="hello world" echo "${str^}" # 输出:Hello world ``` **特点:** - 不需要外部命令,性能最佳 - 仅适用于 Bash 4.0 及以上版本 - 使用 `bash --version` 检查版本 ### 5. **`perl` 命令** 支持完整的 Unicode 大小写转换。 **转换为大写:** ```bash echo "café" | perl -CS -ne 'print uc' # 输出:CAFÉ ``` **转换为小写:** ```bash echo "CAFÉ" | perl -CS -ne 'print lc' # 输出:café ``` **特点:** - 支持 Unicode 和多字节字符 - 需要安装 Perl - `-CS` 参数启用 UTF-8 支持 ### 6. **`python3` 命令** 使用 Python 进行精确的大小写转换。 **转换为大写:** ```bash echo "straße" | python3 -c "import sys; print(sys.stdin.read().upper())" # 输出:STRASSE (德语正确转换) ``` **转换为小写:** ```bash echo "İstanbul" | python3 -c "import sys; print(sys.stdin.read().lower())" # 输出:istanbul (土耳其语正确转换) ``` **特点:** - 支持完整的 Unicode 大小写规则 - 支持 locale 特定的转换 - 需要 Python 环境 ### 7. **`dd` 命令** 不常用但可行的替代方法。 **转换为大写:** ```bash echo "hello" | dd conv=ucase 2>/dev/null # 输出:HELLO ``` **特点:** - 只能处理单个单词 - 会吞掉空格和特殊字符 - 不推荐常规使用 ### 使用场景对比 | 方法 | 最佳使用场景 | 多字节支持 | 系统要求 | |-------------|---------------------------------------|------------|------------------------| | `tr` | 简单英文字符转换 | ❌ | 所有系统 | | `awk` | 文件中的列处理 | ❌ | 所有系统 | | `sed` | 流处理中的简单转换 (GNU系统) | ❌ | GNU sed | | Bash 原生 | 脚本中的变量操作 | ❌ | Bash ≥4.0 | | `perl` | Unicode 和多语言支持 | ✔️ | 需安装 Perl | | `python3` | 精确的国际化大小写转换 | ✔️ | 需安装 Python3 | ### 实用示例:批量转换文件名小写 ```bash # 将当前目录下所有文件和子目录转为小写 find . -depth -exec rename 's/(.*)\/([^\/]*)/$1\/\L$2/' {} + ``` ### 示例:带重音字符的正确转换 ```bash # 使用 Python 正确处理德语 ß echo "straße" | python3 -c "import sys; print(sys.stdin.read().upper())" # 输出: STRASSE # 使用 tr 的错误示例 echo "straße" | tr '[:lower:]' '[:upper:]' # 错误输出: STRAßE ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值