需要在打印第一行时删除libcom.so
来打印1.0.0
。
#!/bin/sh
data=$(sed '0,/^__VERSION__$/d' "$0")
for d in $data
do
echo with version:
echo $d
echo "with no version"
d1="$(cut -d\.so -f1 <<< $d)"
#Need to save it in a variable for further processing
echo $d1
done
exit
__VERSION__
libcom.so.1.0.0
libclock.so.1.0.0
libstdc++.so.6.0.20
libxml.so.2.7.8
libmi.so.1.0.0
librt.so.6.6.5
libcsapi.so.1.0.0
错误显示为cut: the delimiter must be a single character
,最好的方法是什么?
答案 0 :(得分:2)
如果您只想将字符串放到第一个.so
之前,bash会很乐意为您处理:
d1="${d%%.so*}.so"
${d%%.so*}
删除与%%
匹配的变量d
右侧.so*
中最长的字符串。这有效地删除了从.so
开始直到字符串结尾的所有内容。然后,我们手动重新添加我们删除的.so
,因为%%
删除了整个匹配的部分,而不仅仅是通配符部分。
有关详细信息,请参阅parameter expansion上的本指南。
或者,您可以使用sed
,即使它会慢得多:
d1=$(sed 's/\(\.so\).*$/\1/' <<< $d)
答案 1 :(得分:0)
当您的find
支持文件名作为第一个参数时,您可以使用
find lib*so* | sed 's/\.so.*/.so/'