如何在bash中获取两个点之间的字符串?

时间:2015-08-20 06:54:54

标签: git bash substring

我有几种git-Repos格式:

product.module1.git
product.module2.git
...

现在我只想迭代列表以获得

module1
module2

我怎样才能做到这一点?我已经尝试过将其与grep结合使用,但是我无法删除第一个和最后一个字符串部分。

4 个答案:

答案 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