bash 使用 sed/awk 从文件中获取所需行

bash 使用 sed/awk 从文件中获取所需行

文件内容如下:

Text1:
    text_1: Text1 text_1
    text_2:
    - text
    - file1:\\
    - file2:\\
Text2:
    text_1: Text2 text_1
    text_2:
    - text
    - file3:\\
Text3:
    etc

输出:打印给定 Textn 的“file:\”条目。知道如何在 Linux 中使用 sed/awk 命令来实现这一点。

示例:test.txt 文件内容如下:

$ cat test.txt 
Text1:
    text_1: Text1 text_1
    text_2:
    - text
    - file1:\\
    - file2:\\
Text2:
    text_1: Text2 text1
    text_2:
    - text
    - file3:\\
Text3:
    etc

按照建议尝试下面的 grep 命令,它会打印 test.txt 文件中的所有“file:\”条目。对于“Text1:”匹配,我需要的只是 file1:\ 和 file2:\ 作为输出,对于“Text2:”仅匹配 file3:\。

答案1

yq在新更新的 YAML 文件上使用,您可以选择file如下值

yq '.Text1.text_2[] | select(. == "file*")' file.yaml

输出

file1:\\
file2:\\

如果您希望能够挑选出不同的TextN值,您可以执行类似的操作来传递适当的键值

for key in Text1 Text2
do
    printf 'Key %s:\n' "$key"
    yqText="$key" yq 'eval("." + env(yqText) + ".text_2[]") | select(. == "file*")' file.yaml |
        while IFS= read -r val
        do
            printf 'Value: %s\n' "$val"
        done
    echo
done

如果你还没有yq安装,你可以自己从 Github 仓库安装https://github.com/mikefarah/yq,或者如果它用于托管环境,请询问您的变更委员会。

相关内容