【问题标题】:Using Awk to pass to Bash使用 awk 传递给 Bash
【发布时间】:2019-03-10 10:12:01
【问题描述】:

更新不再使用 sed

我正在尝试编写一个脚本来处理在 git 分支中已更改的某些文件类型。 例如,如果有人更改了扩展名为“.text”的文件,我想将该文件名传递给某种 bash 脚本。在将文件名传递给 bash 脚本之前,我还需要删除部分文件名。

我知道如果我执行以下命令,我可以获得分支中已更改的 git 文件的列表

git diff --name-only master

结合 grep,我只能检索具有特殊扩展名的文件

git diff --name-only master | grep .text

现在这是我无法使用命令行的部分,我想将每个文件单独传递给我的 bash 脚本。以下仅使用所有参数执行一次回显。这可能吗?

git diff --name-only master | grep .text | awk -F"folder-name/" '{print $2} | xargs -t echo

【问题讨论】:

    标签: sed command-line grep


    【解决方案1】:

    您已要求 sed 默认不打印任何内容,并且您没有明确打印任何内容。这里是man sed

       -n, --quiet, --silent
              suppress automatic printing of pattern space
    

    如果要自动打印行,请删除 -n

    更新:

    您的 awk 尝试缺少单引号:

    awk -F"folder-name/" '{print $2} 
                                    ^-- Here
    

    如果你想每次只用一个参数调用你的脚本,你可以使用xargs -n 1。这里是man xargs

       -n max-args, --max-args=max-args
              Use  at  most  max-args  arguments per command line.  Fewer than
              max-args arguments will be used if the size (see the -s  option)
              is  exceeded, unless the -x option is given, in which case xargs
              will exit.
    

    【讨论】:

    • 我更新为使用 awk 而不是 sed,请参阅上面的新描述。欣赏它
    猜你喜欢
    • 1970-01-01
    • 2012-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-13
    • 2015-10-07
    • 2016-02-09
    • 1970-01-01
    相关资源
    最近更新 更多