如何将字符串的一部分提取到bashshell脚本中的变量中?

如何将字符串的一部分提取到bashshell脚本中的变量中?,bash,shell,sed,awk,grep,Bash,Shell,Sed,Awk,Grep,我有一个eclipse.classpath文件,其中有许多行,如 <classpathentry kind="lib" path="/somepath/somelibrary.jar"/> 我的意图是编写一个bash脚本,它将解析每一行,以测试库是否存在。对于额外的积分,因为我知道我的机器上可能存在库的备用位置,如果在类路径文件指定的位置找不到,我也会搜索备用位置,如果可能的话修复类路径文件 我该怎么做 似乎是相关的,但不确定如何将其转换为类似的格式 #!/bin/sh whi

我有一个eclipse.classpath文件,其中有许多行,如

<classpathentry kind="lib" path="/somepath/somelibrary.jar"/>

我的意图是编写一个bash脚本,它将解析每一行,以测试库是否存在。对于额外的积分,因为我知道我的机器上可能存在库的备用位置,如果在类路径文件指定的位置找不到,我也会搜索备用位置,如果可能的话修复类路径文件

我该怎么做

似乎是相关的,但不确定如何将其转换为类似的格式

#!/bin/sh
while read f
do
   if [ -f $f ]
   then
      echo "Found: $f"
   else
      echo "Missing: $f"
   fi
done < $1
#/垃圾箱/垃圾箱
读f时
做
如果[-f$f]
然后
echo“找到:$f”
其他的
回声“缺失:$f”
fi
已完成<$1
我想这是我的目标

sed -n 's/.*path="\([^"]*\)".*/\1/p' file |
while IFS= read -r file
do
   if [ -f "$f" ]
   then
      echo "Found: $f"
   else
      echo "Missing: $f"
   fi
done

它不适用于包含换行符或双引号的文件名。如果您有任何一个,请告诉我们。

使用
egrep
首先从类路径文件中获取jar路径,然后迭代每个路径

for f in $(egrep -o '[/a-zA-Z0-9]+\.jar' .classpath); do
   if [ -f $f ]
   then
       echo "Found: $f"
   else
      echo "Missing: $f"
  fi
done

我可以推荐python、ruby、PHP?正如@KarolyHorvath所提到的,使用python、ruby、php和其他解决方案可能会更好。Bash可能不是解析xml的最理想方式。由于
.classpath
恰好是xml格式,您可能可以使用
xpath
。您可以尝试使用xpath-q-e classpath/classpathentry[@kind=\'lib\']/@path | cut-d'='-f2 | tr-d''或其他更好的方法来获取路径列表。很遗憾,我很乐意用任何语言来实现这一点。我不熟悉(或不够熟悉)为了完成这项工作,请使用上面提到的任何一种方法。也许您可以为我要完成的任务提出一个解决方案…很高兴验证您的工作:)我目前正在查找bash版本,并将很快用我脚本的当前状态更新此问题。如果是标准XML,则双引号将被编码为