【问题标题】:Create files using strings which delimited by specific character in BASH使用在 BASH 中由特定字符分隔的字符串创建文件
【发布时间】:2016-03-19 13:04:02
【问题描述】:

假设我们有以下命令及其相关输出:

gsettings list-recursively org.gnome.Terminal.ProfilesList | head -n 1 | grep -oP '(?<=\[).*?(?=\])'

输出:

'b1dcc9dd-5262-4d8d-a863-c897e6d979b9', 'ca4b733c-53f2-4a7e-8a47-dce8de182546', '802e8bb8-1b78-4e1b-b97a-538d7e2f9c63', '892cd84f-9718-46ef-be06-eeda0a0550b1', '6a7d836f-b2e8-4a1e-87c9-e64e9692c8a8', '2b9e8848-0b4a-44c7-98c7-3a7e880e9b45', 'b23a4a62-3e25-40ae-844f-00fb1fc244d9'

我需要在脚本中使用 gsettings 命令并创建有关输出 ot gessetings 命令的文件名。例如文件名应该是

b1dcc9dd-5262-4d8d-a863-c897e6d979b9

下一个:

ca4b733c-53f2-4a7e-8a47-dce8de182546

等等。

我该怎么做?

【问题讨论】:

    标签: bash loops split


    【解决方案1】:

    另一种解决方案...只需将命令的输出通过管道传输到:

    your_command | sed "s/[ ']//g" | xargs -d, touch
    

    【讨论】:

    • 您可以更改您的 sed 命令以提前退出,然后 OP 可以摆脱 | head -1: sed "s/[ ']//g;1q"。要同时替换 ][,您只需将其添加到字符类的前面:sed "s/[][ ']//g;1q" 这将使 OP 将 gsettings 直接传递给 sed。
    • @dev-null:你是 100% 正确的。将让 OP 根据您的建议更改他的初始 cmd
    【解决方案2】:

    您可以使用进程替换来读取您的 gsettings 输出并将其存储在一个数组中:

    IFS=', ' read -r -a array < <(gsettings)
    for f in "${array[@]}"
    do
        file=$(echo $f |tr -d "'" ) # removes leading and trailing quotes
        touch "$file"
    done
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-03
      • 1970-01-01
      • 1970-01-01
      • 2016-08-03
      相关资源
      最近更新 更多