news 2026/6/24 9:02:25

Shell脚本字符串操作功能总结

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Shell脚本字符串操作功能总结

以下是在Shell脚本中常见的字符串操作功能总结,涵盖了各种处理字符串的场景:

1.基本定义和赋值

str="Hello World" # 双引号(允许变量扩展) str='Hello World' # 单引号(原样输出) str=$'Hello\nWorld' # ANSI-C引用(支持转义字符)

2.字符串长度

${#string} # 获取字符串长度 echo ${#str} # 输出:11

3.子字符串提取

${string:position} # 从指定位置开始提取 ${string:position:length} # 从指定位置提取指定长度 str="Hello World" echo ${str:6} # 输出:World echo ${str:6:3} # 输出:Wor echo ${str: -5} # 输出:World(负数从末尾开始)

4.字符串删除(从开头删除)

${string#substring} # 删除最短匹配的前缀 ${string##substring} # 删除最长匹配的前缀 path="/usr/local/bin/app" echo ${path#/*/} # 输出:local/bin/app echo ${path##/*/} # 输出:app

5.字符串删除(从末尾删除)

${string%substring} # 删除最短匹配的后缀 ${string%%substring} # 删除最长匹配的后缀 file="app.tar.gz" echo ${file%.*} # 输出:app.tar echo ${file%%.*} # 输出:app echo ${file%.gz} # 输出:app.tar

6.字符串替换

${string/pattern/replacement} # 替换第一个匹配 ${string//pattern/replacement} # 替换所有匹配 ${string/#pattern/replacement} # 替换开头的匹配 ${string/%pattern/replacement} # 替换结尾的匹配 str="hello world hello" echo ${str/hello/HI} # 输出:HI world hello echo ${str//hello/HI} # 输出:HI world HI echo ${str/#hello/HI} # 输出:HI world hello

7.大小写转换(Bash 4.0+)

${string^^} # 转大写 ${string,,} # 转小写 ${string^} # 首字母大写 ${string,} # 首字母小写 str="hello World" echo ${str^^} # 输出:HELLO WORLD echo ${str,,} # 输出:hello world echo ${str^} # 输出:Hello World

8.字符串查找(位置)

# 查找子字符串位置 expr index "$string" "$substring" # 返回字符位置 expr match "$string" "$pattern" # 返回匹配长度 expr substr "$string" $position $length # 子串截取 str="hello world" expr index "$str" "wo" # 输出:7 expr match "$str" "hello" # 输出:5 expr substr "$str" 2 3 # 输出:ell

9.字符串比较

[[ $str1 == $str2 ]] # 相等比较 [[ $str1 != $str2 ]] # 不等比较 [[ $str1 < $str2 ]] # 按字典序小于 [[ $str1 > $str2 ]] # 按字典序大于 [[ -z $str ]] # 是否为空 [[ -n $str ]] # 是否非空 [[ $str =~ regex ]] # 正则匹配 if [[ "hello" =~ ^h.*o$ ]]; then echo "匹配" fi

10.字符串分割

# 使用IFS分割为数组 IFS=',' read -ra array <<< "a,b,c,d" echo ${array[1]} # 输出:b # 使用参数展开 str="one:two:three" arr=(${str//:/ }) # 将冒号替换为空格再转换为数组

11.字符串拼接

str1="Hello" str2="World" result="$str1 $str2" # 输出:Hello World result=$str1$str2 # 输出:HelloWorld result=${str1}_${str2} # 输出:Hello_World

12.去除空白字符

# 去除开头空白 ${string#${string%%[![:space:]]*}} # 去除结尾空白 ${string%${string##*[![:space:]]}} # 使用sed echo "$str" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//'

13.字符串包含判断

# 方法1:使用通配符 if [[ $str == *"substring"* ]]; then echo "包含" fi # 方法2:使用正则 if [[ $str =~ "substring" ]]; then echo "包含" fi # 方法3:使用grep if echo "$str" | grep -q "substring"; then echo "包含" fi

14.字符串反转

str="hello" rev=$(echo $str | rev) # 需要rev命令支持 echo $rev # 输出:olleh ######################################### # 纯Bash实现 reverse() { local str="$1" local rev="" for ((i=${#str}-1; i>=0; i--)); do rev="$rev${str:$i:1}" done echo "$rev" }

15.字符串统计

# 统计字符出现次数 str="hello world" char="l" count=$(echo "${str}" | awk -F"${char}" '{print NF-1}') echo $count # 输出:3 # 统计单词数 echo "$str" | wc -w

16.进制转换

# 十进制转十六进制 printf "%x\n" 255 # 输出:ff # 十六进制转十进制 echo $((0xff)) # 输出:255 # 二进制转十进制 echo $((2#11111111)) # 输出:255

17.使用外部命令处理字符串

# 使用awk echo "hello:world" | awk -F: '{print $2}' # 使用sed echo "hello world" | sed 's/hello/HI/' # 使用cut echo "hello:world" | cut -d: -f2 # 使用tr(字符转换) echo "HELLO" | tr 'A-Z' 'a-z' # 转小写 echo "hello" | tr 'a-z' 'A-Z' # 转大写 echo "hello" | tr -d 'aeiou' # 删除元音字母

18.特殊字符处理

# URL编码/解码 urlencode() { local string="${1}" local strlen=${#string} local encoded="" for (( pos=0 ; pos<strlen ; pos++ )); do c=${string:$pos:1} case "$c" in [-_.~a-zA-Z0-9] ) o="${c}" ;; * ) printf -v o '%%%02x' "'$c" esac encoded+="${o}" done echo "${encoded}" } # Base64编码/解码 echo "hello" | base64 # 编码 echo "aGVsbG8=" | base64 -d # 解码

19.字符串填充和对齐

# 使用printf格式化 printf "%-10s" "hello" # 左对齐,宽度10 printf "%10s" "hello" # 右对齐,宽度10 printf "%010d" 123 # 用0填充:0000000123 # 在字符串前后添加固定字符 printf "%0.s-" {1..10} # 生成10个连字符

20.多行字符串处理

# Here Document cat << EOF 第一行 第二行 第三行 EOF # 删除多行字符串中的空行 echo -e "line1\n\nline2\n\nline3" | sed '/^$/d'

实用示例组合

#!/bin/bash # 综合示例:处理文件名 filename="myfile.tar.gz" # 获取不同部分 basename="${filename%.*}" # myfile.tar extension="${filename##*.}" # gz name="${basename%.*}" # myfile full_extension="${filename#*.}" # tar.gz echo "文件名: $filename" echo "基本名: $basename" echo "扩展名: $extension" echo "名称: $name" echo "完整扩展名: $full_extension"
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/23 22:21:48

查找算法 _

二分查找 二分查找&#xff08;Binary Search&#xff09;是一种高效的查找算法&#xff0c;也叫折半查找。核心思想&#xff1a;对于一个有序的数据集合&#xff0c;每次查找都将查找范围缩小为原来的一半&#xff0c;直到找到目标值或确定目标值不存在。二分查找要求数据必须…

作者头像 李华
网站建设 2026/6/23 18:02:46

10、系统安全配置强化指南

系统安全配置强化指南 1. 概述 入侵者常采用多种技术来隐藏自己的踪迹并确保对受害主机的持续root访问,从清理日志文件到安装后门和rootkit等。检测高级黑客的存在往往十分困难,因此,强化主机的策略和配置至关重要。以下将详细介绍如何对系统的默认设置和常用服务进行加固…

作者头像 李华
网站建设 2026/6/24 22:50:16

14、夏普 Zaurus PDA 黑客工具介绍

夏普 Zaurus PDA 黑客工具介绍 在网络安全和渗透测试领域,有许多工具可以用于不同的目的,如端口扫描、建立安全隧道、测试防火墙规则等。本文将介绍一些可用于夏普 Zaurus PDA 的工具及其功能、下载地址和使用方法。 1. BING Bing 是一个简单的脚本,可自动执行端口扫描。…

作者头像 李华
网站建设 2026/6/23 23:12:58

15、Zaurus PDA安全工具与相关技术解析

Zaurus PDA安全工具与相关技术解析 1. Perl与Zaurus PDA 许多安全工具,如Nikto和Whisker Web漏洞扫描器,都是用Perl语言编写的。由于Perl是一种解释型语言,因此无需重新编译现有的Perl脚本,就可以在Zaurus上运行它们。你可以在http://zaurus.frontgarden.net/perl.html获…

作者头像 李华
网站建设 2026/6/24 3:41:56

晨控CK-GW04S-EIP与基恩士KV-X520系列PLC配置EtherNetIP通讯连接手册

晨控CK-GW04S-EIP与基恩士KV-X520系列PLC配置EtherNetIP通讯连接手册CK-GW04S系列是晨控为工业多通道需求研制的一款网关控制器,方便用户集成到PLC等控制系统中&#xff0c;系统集成了4路读写接口&#xff0c;并且支持大部分工业协议ModbusTCP、Profinet、EtherNet/lP、EtherCa…

作者头像 李华
网站建设 2026/6/24 1:26:29

21、Iptables与Snort规则模拟及Fwsnort部署

Iptables与Snort规则模拟及Fwsnort部署 1. Iptables状态匹配与规则应用 Iptables的状态匹配扩展提供了强大的数据包过滤功能。通过 iptables -m state -h 命令可以查看状态匹配的选项,其版本为v1.3.7,支持的状态选项包括 INVALID 、 ESTABLISHED 、 NEW 、 RELATE…

作者头像 李华