带有bash的子字符串并赋值给变量

时间:2017-06-28 05:22:55

标签: bash

我执行以下命令:

xinput  | grep Razer

输出

⎜   ↳ Razer  Razer Abyssus                      id=12   [slave  pointer  (2)]

如何获取id,将其分配给变量,以便稍后在脚本中重用它?身份正在改变。

3 个答案:

答案 0 :(得分:2)

您可以将命令传递给sed:

yourvar=$(xinput | sed '/Razer/s/.*id=\([0-9]*\).*/\1/')
  • /Razer/:当找到包含Razer的行时
  • s/.*id=\([0-9]*\).*/\1/:捕获id值并使用反向引用进行打印。

答案 1 :(得分:1)

grep解决方案:如果任何行包含 Razer后跟id ,则会打印该ID。这里perl使用-p grep \K标志来使用xinput |grep -oP 'Razer.*id=\K[^ ]+' 12 正则表达式。 gawk表示忽略左侧的所有内容。

awk '/Razer/{match($0,/id=([^ ]+)/,a);print a[1]}'
12

使用 public class GifEditText extends EditText { public GifEditText(Context context) { super(context); } public GifEditText(Context context, AttributeSet attrs) { super(context, attrs); } public GifEditText(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override public InputConnection onCreateInputConnection(EditorInfo editorInfo) { final InputConnection ic = super.onCreateInputConnection(editorInfo); EditorInfoCompat.setContentMimeTypes(editorInfo, new String[]{"image/gif"}); final InputConnectionCompat.OnCommitContentListener callback = new InputConnectionCompat.OnCommitContentListener() { @Override public boolean onCommitContent(InputContentInfoCompat inputContentInfo, int flags, Bundle opts) { // read and display inputContentInfo asynchronously if (BuildCompat.isAtLeastNMR1() && (flags & InputConnectionCompat.INPUT_CONTENT_GRANT_READ_URI_PERMISSION) != 0) { try { inputContentInfo.requestPermission(); } catch (Exception e) { return false; // return false if failed } } // read and display inputContentInfo asynchronously. // call inputContentInfo.releasePermission() as needed. return true; // return true if succeeded } }; return InputConnectionCompat.createWrapper(ic, editorInfo, callback); } } 的匹配功能:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <com.test.GifEditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Test gif" />
</LinearLayout>

答案 2 :(得分:0)

如果您GNU AWKgawk,您也可以执行以下操作。

id=$(xinput | awk '/Razer/{printf "%s",gensub(/^.*id=[[:digit:]]*).*$/,"\\1",$0)}')