【发布时间】:2023-01-08 10:59:08
【问题描述】:
我有一个文件,我必须在其中检查以特定模式开头的行。例如 - id: 34。我写了 bash 脚本,但它似乎没有检测到该行
#!/bin/bash
id=34
# Read the file line by line
while read line; do
# Check if the line starts with pattern
if [[ $line =~ ^[[:space:]]-[[:space:]]id:[[:space:]]$id ]]; then
in_section=true
echo "$line"
fi
done < file.txt
样本文件
$cat file.txt
apiVersion: v1
data:
topologydata: |
config:
topology:
spspan:
- id: 1
name: hyudcda1-
siteids:
- 34
spssite:
- id: 34
location: PCW
matesite: tesan
【问题讨论】:
-
您只匹配以开头的行一空白字符,而不是任意的空白序列。据推测,该行没有缩进单个制表符。
-
为自己省去很多麻烦,并使用适当的 YAML 解析器,而不是试图用正则表达式破解一些东西。
-
使用 yaml 解析是我的第一个想法,但请相信我,我没有那个选项
-
正如@chepner 所说,您只匹配一个空格单元。如果你使用“*”,它将匹配零个或多个,像这样
if [[ $line =~ ^[[:space:]]*-[[:space:]]*+id:[[:space:]]*+$id ]]; then
标签: bash