sed 's/< //g'|sed 's/ >//g'|grep ^bbb|awk -F "," '{print $2}' 解释这串脚本
时间: 2024-02-06 17:02:20 浏览: 72
这串脚本是一个组合使用了sed、grep和awk命令的管道命令。让我们逐步解释它:
1. `sed 's/< //g'`:这部分命令使用sed的替换功能将"< "替换为空格,与之前解释过的相同。
2. `|`:这个符号是管道符号,用于将前一个命令的输出作为后一个命令的输入。
3. `sed 's/ >//g'`:这部分命令与之前解释过的相同,将">"替换为空格。
4. `|`:再次使用管道符号。
5. `grep ^bbb`:这部分命令使用grep命令来查找以"bbb"开头的行。'^'表示行的开头。
6. `|`:再次使用管道符号。
7. `awk -F "," '{print $2}'`:这部分命令使用awk命令来进行文本处理。"-F ",""指定输入的字段分隔符为逗号。'{print $2}'表示打印每行的第二个字段。
综合起来,这个脚本的目的是将输入中的"< "和">"都替换为空格,然后从结果中筛选出以"bbb"开头的行,并打印每行的第二个字段。
相关问题
f grep -iq "^[=]*TVF report summary[=]*$" $line/summary.rep; then TVFNo=$(awk 'NR==13,NR==22' $line/summary.rep) TVFNo=$(sed "s/[a-zA-Z]//g" <<< $TVFNo) TVFNo=$(sed "s/[=]//g" <<< $TVFNo) TVFNo=$(sed "s/[_]//g" <<< $TVFNo) TVFNo=$(sed "s/[[:space:]]//g" <<< $TVFNo) TVFNo=$(sed "s/[:]//g" <<< $TVFNo) TVFNo=$(sed "s/[/]//g" <<< $TVFNo) TVFNo=$(sed "s/[.]//g" <<< $TVFNo) eval TVFNo$Number=$TVFNo fi 将其中的sed命令写成一个函数,然后再调用这个函数
你可以将 `sed` 命令写成一个函数,然后在需要的地方调用该函数。下面是将 `sed` 命令封装成函数的示例代码:
```shell
# 定义 sed 函数
sanitize_string() {
local string="$1"
string=$(sed "s/[a-zA-Z]//g" <<< "$string")
string=$(sed "s/[=]//g" <<< "$string")
string=$(sed "s/[_]//g" <<< "$string")
string=$(sed "s/[[:space:]]//g" <<< "$string")
string=$(sed "s/[:]//g" <<< "$string")
string=$(sed "s/[/]//g" <<< "$string")
string=$(sed "s/[.]//g" <<< "$string")
echo "$string"
}
# 在需要的地方调用函数
if grep -iq "^[=]*TVF report summary[=]*$" "$line/summary.rep"; then
TVFNo=$(awk 'NR==13,NR==22' "$line/summary.rep")
TVFNo=$(sanitize_string "$TVFNo")
eval "TVFNo$Number=$TVFNo"
fi
```
在上面的代码中,`sanitize_string` 函数接受一个字符串参数,并使用一系列的 `sed` 命令对字符串进行处理。然后,你可以在需要的地方调用该函数,并将需要处理的字符串作为参数传递给它。
请注意,`$line` 和 `$Number` 是你原始代码中使用的变量,这里假设它们已经正确定义和赋值。另外,我还添加了对变量和文件名的引号,以避免可能的空格或特殊字符导致的问题。
os_disk_symbol=$(echo $(lsblk |grep -B1 -E "part|boot" |grep -E "^sd[a-z]+|^nvme" |awk '{print $1}') |sed 's/ /|/') non_os_disk_set=$(lsscsi -g |-E "ATA|TOSHIBA" |awk '{print $(NF-1)}' |grep -Ev $os_disk_symbol) if [[ -n $non_os_disk_set ]];then for i in $(echo "$non_os_disk_set") do rotationRate=$(smartctl -i $i |awk -F":" '/Rotation Rate/{print $2}') if [[ $rotationRate =~ "Solid State Device" ]];then echo $i |awk -F"/" '{print $3}' >> ssd_symbol_set elif [[ $rotationRate =~ "rpm" ]];then echo $i |awk -F"/" '{print $3}' >> hdd_symbol_set fi done fi
这是一个 Shell 脚本,主要作用是获取当前系统中所有硬盘的信息,并将非系统盘的硬盘区分为 SSD 和 HDD 两类,并将它们的设备符号分别保存在 ssd_symbol_set 和 hdd_symbol_set 两个文件中。具体实现步骤如下:
1. 使用 lsblk 命令获取当前系统中所有硬盘的信息,并通过 grep 命令过滤出包含 "part" 或 "boot" 字段的行,然后使用 awk 命令提取出硬盘设备符号,并使用 sed 命令将多个设备符号合并为一个正则表达式。
2. 使用 lsscsi 命令获取所有 SCSI 设备的信息,并通过 awk 命令提取出硬盘设备符号,并使用 grep 命令过滤掉系统盘的设备符号。
3. 遍历所有非系统盘的设备符号,使用 smartctl 命令获取硬盘信息,并使用 awk 命令提取出硬盘类型(SSD 或 HDD),然后将设备符号保存到对应的文件中。
最终,执行完该脚本后,可以通过查看 ssd_symbol_set 和 hdd_symbol_set 文件来获取系统中所有 SSD 和 HDD 的设备符号。
阅读全文