【问题标题】:create a path from lines in a file on the unix command line在 unix 命令行上从文件中的行创建路径
【发布时间】:2013-05-06 09:06:05
【问题描述】:

我想在 bash 脚本中构建一个基本的 Java 类路径。

这个命令计算出我路径中的所有 jar 文件:

find ~/jars | grep \.jar$

这列出了我想要在我的路径上的所有 jar 文件,每行一个。

我怎样才能将这些行合并在一起,使它们在一行中,以: 分隔,然后将其放入我调用 Java 时可以在脚本中使用的变量中?

例如:

JARS=`find ~/jars | grep \.jar$`
#### somehow make JARS into one line with : between entries
java -cp $JARS ...

【问题讨论】:

    标签: shell unix command-line


    【解决方案1】:

    如果您已经使用过find,则不需要管道。

    find 有-regex-name 选项,也有printf 可用:

    您可以根据自己的要求试试这个:

    find ~/jars -name "*.jar" -printf"%p "
    

    我没有测试,但它会输出所有带有完整路径的 jar,空格分隔。

    【讨论】:

    【解决方案2】:

    您可以通过管道传输它并使用 sed 更改 , 的新行:

    sed ':a;N;$!ba;s/\n/:/g'
    

    大家一起,

    find ~/jars | grep \.jar$ | sed ':a;N;$!ba;s/\n/:/g'
    

    您也可以使用tr 执行此操作,尽管它会留下一个尾随冒号 (glenn jackman comment):

    find ~/jars | grep \.jar$ | tr '\n' ':'
    

    基于SED: How can I replace a newline (\n)?

    【讨论】:

    • tr 解决方案留下一个尾随冒号
    【解决方案3】:
    jars=($(find ~/jars -type f -name \*.jar))   # save paths into array
    classpath=$(IFS=:; echo "${jars[*]}")   # convert to colon-separated
    java -cp "$classpath" ...               # and use it
    

    【讨论】:

      猜你喜欢
      • 2019-12-20
      • 2016-07-21
      • 1970-01-01
      • 2011-02-08
      • 2012-04-07
      • 1970-01-01
      • 2012-06-29
      • 1970-01-01
      • 2012-03-16
      相关资源
      最近更新 更多