我有几种git-Repos格式:
product.module1.git
product.module2.git
...
现在我只想迭代列表以获得
module1
module2
我怎样才能做到这一点?我已经尝试过将其与grep结合使用,但是我无法删除第一个和最后一个字符串部分。
答案 0 :(得分:1)
public class MainActivity extends Activity {
Context mContext = this;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
...
SharedPreferences appPrefs = mContext.getSharedPreferences("com.example.gcmclient_preferences", Context.MODE_PRIVATE);
String token = appPrefs.getString("token", "");
if (token.isEmpty()) {
try {
getGCMToken("0123456789"); // Project ID: xxxx Project Number: 0123456789 at https://console.developers.google.com/project/...
} catch (Exception ex) {
ex.printStackTrace();
}
}
...
}
...
private void getGCMToken(final String senderId) throws Exception {
new AsyncTask<Void, Void, Void>() {
@Override
protected String doInBackground(Void... params) {
String token = "";
try {
InstanceID instanceID = InstanceID.getInstance(mContext);
token = instanceID.getToken(senderId, GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
if (token != null && !token.isEmpty()) {
SharedPreferences appPrefs = mContext.getSharedPreferences("com.example.gcmclient_preferences", Context.MODE_PRIVATE);
SharedPreferences.Editor prefsEditor = appPrefs.edit();
prefsEditor.putString("token", token);
prefsEditor.commit();
}
Log.i("GCM_Token", token);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}.execute();
}
}
将完成这项工作:
cut
或者awk:
cut -d . -f2 file
module1
module2
答案 1 :(得分:1)
如果您的grep
支持-P
选项:
$ grep -oP '(?<=[.])\w+(?=[.])' file
module1
module2
(?<=[.])
背后隐藏着。在这种情况下,它恰好在一段时间后匹配。
\w+
匹配任意数量的字符。
(?=[.])
是展望未来。在这种情况下,它恰好在一段时间之前匹配。
答案 2 :(得分:1)
while read -r line; do
if [[ "$line" =~ \.(.*)\. ]]; then
echo "${BASH_REMATCH[1]}"
fi
done < file
输出:
module1 module2
答案 3 :(得分:1)
在Bash中,使用数组和IFS
进行标记很容易:
var="product.module1.git"
IFS="." tokens=( ${var} )
echo ${tokens[1]}
# this outputs module1