使用 Awk 或 sed,如何拉出列表中的最后一项?
Using Awk or sed, how to pull last item in the list?
在下面,我需要使用 Awk 或 sed 获取最后一项 "subnet-0bfc68cb13432a94b"
用双引号引起来?
[
"subnet-08585db3344bce1ea",
"subnet-0537a333d2337f361",
"subnet-0bfc68cb13432a94b"
]
您应该考虑使用 jq
来解析 JSON:
jq -r '.[-1]' file.json
示例:
$ cat << EOF | jq -r '.[-1]'
[
"subnet-08585db3344bce1ea",
"subnet-0537a333d2337f361",
"subnet-0bfc68cb13432a94b"
]
EOF
subnet-0bfc68cb13432a94b
read -r -d '' content <<EOF
[
"subnet-08585db3344bce1ea",
"subnet-0537a333d2337f361",
"subnet-0bfc68cb13432a94b"
]
EOF
awk -F'"' '(){o=} END{print o}' <<<"$content"
### output
subnet-0bfc68cb13432a94b
因此,假设没有传递其他信息,这应该是一个简单的解决方案。
基本上:
- 将字段分隔符设置为
double-qoutes
- store/overwrite 变量中的值
- 末尾的输出变量,现在包含该数组的最后一个元素。
利用最后一个没有逗号的元素的 sed 解决方案可能如下所示:
sed -n 's/^[[:space:]]*"\(.*\)"[[:space:]]*$//p' <<<$content
所以:
- 用
-n
标志抑制正常输出
- 捕获double-quotes中的内容并打印
这可能适合您 (GNU sed):
sed -En 'N;$!D;s/.*"(.*)".*//p' file
捕获最后两行,然后使用模式匹配 return 所需的字符串。
选择:
sed -E '$!{h;d};g;s/.*"(.*)".*//' file
使用任何 awk:
$ awk -F'"' '/"$/{print }' file
subnet-0bfc68cb13432a94b
或任何 sed:
$ sed -n 's/.*"\(.*\)"$//p' file
subnet-0bfc68cb13432a94b
在下面,我需要使用 Awk 或 sed 获取最后一项 "subnet-0bfc68cb13432a94b"
用双引号引起来?
[
"subnet-08585db3344bce1ea",
"subnet-0537a333d2337f361",
"subnet-0bfc68cb13432a94b"
]
您应该考虑使用 jq
来解析 JSON:
jq -r '.[-1]' file.json
示例:
$ cat << EOF | jq -r '.[-1]'
[
"subnet-08585db3344bce1ea",
"subnet-0537a333d2337f361",
"subnet-0bfc68cb13432a94b"
]
EOF
subnet-0bfc68cb13432a94b
read -r -d '' content <<EOF
[
"subnet-08585db3344bce1ea",
"subnet-0537a333d2337f361",
"subnet-0bfc68cb13432a94b"
]
EOF
awk -F'"' '(){o=} END{print o}' <<<"$content"
### output
subnet-0bfc68cb13432a94b
因此,假设没有传递其他信息,这应该是一个简单的解决方案。
基本上:
- 将字段分隔符设置为
double-qoutes
- store/overwrite 变量中的值
- 末尾的输出变量,现在包含该数组的最后一个元素。
利用最后一个没有逗号的元素的 sed 解决方案可能如下所示:
sed -n 's/^[[:space:]]*"\(.*\)"[[:space:]]*$//p' <<<$content
所以:
- 用
-n
标志抑制正常输出 - 捕获double-quotes中的内容并打印
这可能适合您 (GNU sed):
sed -En 'N;$!D;s/.*"(.*)".*//p' file
捕获最后两行,然后使用模式匹配 return 所需的字符串。
选择:
sed -E '$!{h;d};g;s/.*"(.*)".*//' file
使用任何 awk:
$ awk -F'"' '/"$/{print }' file
subnet-0bfc68cb13432a94b
或任何 sed:
$ sed -n 's/.*"\(.*\)"$//p' file
subnet-0bfc68cb13432a94b