sed匹配括号的用法举例

[ ] 需要匹配的时候,需要转义(这个是叛徒)

  echo "[ ]"|sed 's/\[.*\]/aaa/g'

( ) 需要匹配的时候,不要转义

  $echo "( )"|sed 's/( )/c/g'

{ } 需要匹配的时候,不要转义

  $echo "{ }"|sed 's/{ }/c/g'

例子:sed抽取函数名的例子

echo "OpenDevice( int uiIndex, void** phead);" |sed 's/\(.*\)(.*);/\1/g'
<think>好的,用户让我介绍一下Linux中shell的高级用法。首先,我需要确定用户对shell的了解程度。可能用户已经掌握了基础命令,现在想深入一些技巧,提高效率或者编写更复杂的脚本。 接下来,我应该考虑哪些方面算是“高级用法”。通常包括进程控制、参数扩展、重定向技巧、调试方法、数组和字符串处理,以及一些实用工具如sed和awk的高级使用。 用户可能需要实际例子,所以每个点都应该举例说明。比如进程替换、花括号扩展、变量替换中的字符串操作。同时,要注意使用正确的格式,比如用$$包围独立公式,但这里可能更多是代码块。 还要检查是否需要覆盖一些常见的shell,比如bash特有的功能。比如数组操作在bash中更强大,而其他shell可能不同。但通常用户可能指的是bash,所以可以默认以bash为例。 可能需要分点说明,每个高级用法配一个例子和解释。比如进程替换中的<(),或者使用set -x进行调试。此外,管道的高级用法如重定向到多个进程,或者使用命名管道。 还要注意用户提到的LaTeX格式,但在这个回答中可能更多是代码块,所以需要正确使用反引号或代码块标记。不过用户给的例子中有数学表达式,但在shell介绍中可能较少涉及,可能需要转换思维,比如用代码示例代替数学公式。 最后,确保回答结构清晰,逐步介绍每个高级用法,让用户能够理解并应用。同时检查是否有常见的陷阱或实用技巧,比如使用双括号进行算术运算,或者使用globstar进行递归文件匹配。</think>以下是一些 Linux shell 的进阶用法示例(以 bash 为例): --- ### 1. **进程替换** (Process Substitution) ```bash # 比较两个命令的输出差异 diff <(ls /dir1) <(ls /dir2) ``` `<(command)` 会将命令输出转换为临时文件描述符,常用于需要文件输入的场景 --- ### 2. **花括号扩展** (Brace Expansion) ```bash # 快速生成序列 echo file_{1..5}.txt # file_1.txt ... file_5.txt echo {A..D}-{1..3} # A-1 A-2 A-3 ... D-3 # 创建多级目录 mkdir -p project/{src,doc,test}/{2020..2023} ``` --- ### 3. **参数扩展黑魔法** ```bash # 字符串处理 path="/home/user/docs/file.txt" echo ${path%.*} # 移除后缀 → /home/user/docs/file echo ${path##*/} # 取文件名 → file.txt echo ${path/%txt/pdf} # 替换后缀 → /home/user/docs/file.pdf # 默认值设置 ${VAR:-default} # 如果VAR未定义则返回default ${VAR:=default} # 如果VAR未定义则赋值为default ``` --- ### 4. **数组高级操作** ```bash # 关联数组(类似字典) declare -A colors=([red]="#ff0000" [green]="#00ff00") echo ${colors[red]} # 输出 #ff0000 # 数组切片 arr=(zero one two three) echo ${arr[@]:1:2} # 输出 one two ``` --- ### 5. **重定向进阶** ```bash # 同时重定向 stdout 和 stderr command > output.log 2>&1 # 简写形式(bash 4+) command &> output.log # 多重重定向 exec 3<> /tmp/file # 打文件描述符3用于读写 ``` --- ### 6. **调试技巧** ```bash #!/bin/bash -x # 直接启用调试模式 set -euo pipefail # 严格模式: # -e 遇到错误立即退出 # -u 未定义变量报错 # -o pipefail 管道中任意命令失败则整个失败 # 局部调试 set -x your_code_block set +x ``` --- ### 7. **信号捕获** ```bash trap 'cleanup; exit' SIGINT SIGTERM trap 'echo "Line ${LINENO}"' DEBUG # 调试时打印行号 ``` --- ### 8. **正则表达式匹配** ```bash [[ "abc123" =~ ^[a-z]+[0-9]+$ ]] && echo "Match!" ``` --- ### 9. **并行处理** ```bash # 使用 & 和 wait 实现并行 for i in {1..10}; do process $i & done wait # 等待所有后台进程完成 # 使用 xargs 并行 seq 100 | xargs -P4 -I{} command {} ``` --- ### 10. **高级通配符** ```bash shopt -s extglob # 启用扩展通配符 ls !(*.txt|*.log) # 排除指定扩展名的文件 shopt -s globstar # 启用 ** 递归匹配 ls **/*.conf # 递归查找所有.conf文件 ``` --- ### 11. **数学运算** ```bash # 使用 $(( )) 进行整数运算 echo $(( (10 * 2) / 5 )) # 输出4 # 浮点运算(需要 bc) echo "scale=2; 10/3" | bc # 输出3.33 ``` --- ### 12. **自定义补全** ```bash # 创建自定义补全规则 _complete_ssh_hosts() { COMPREPLY=($(grep "^Host " ~/.ssh/config | awk '{print $2}')) } complete -F _complete_ssh_hosts ssh ``` --- 这些技巧可以显著提升 shell 脚本的效率和灵活性,建议通过实际场景逐步掌握。需要特别说明的是,某些功能可能需要 bash 4.0+ 版本支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值