Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 切割匹配并放在另一个位置_Linux_Bash_Sed_Awk - Fatal编程技术网

Linux 切割匹配并放在另一个位置

Linux 切割匹配并放在另一个位置,linux,bash,sed,awk,Linux,Bash,Sed,Awk,如何将方括号内的数字切掉并放在文本开头 例如: some_text123_[12345]_some_text after: 12345_some_text123_[]_some_text 尝试使用sed,匹配: 一组字符 一个括号,然后是数字,然后是另一个括号 另一组字符 正则表达式可以是(.*)(\[[0-9]+\])(.*)(不带空格)。然后,用2-1-3顺序中的组替换匹配项 $ echo "some_text_[12345]_some_text" | sed "s_(.*)\[([0-

如何将方括号内的数字切掉并放在文本开头

例如:

some_text123_[12345]_some_text

after:
12345_some_text123_[]_some_text

尝试使用
sed
,匹配:

  • 一组字符
  • 一个括号,然后是数字,然后是另一个括号
  • 另一组字符
  • 正则表达式可以是
    (.*)(\[[0-9]+\])(.*)
    (不带空格)。然后,用
    2-1-3
    顺序中的组替换匹配项

    $ echo "some_text_[12345]_some_text" | sed "s_(.*)\[([0-9]+)\](.*)_\2\1[]\3_g"
    12345some_text_[]_some_text
    

    我尝试使用
    perl

    这个perl一行程序应该可以工作

    $ echo some_text123_[123]_some_text | perl -ne 'print "$1_", "$`", "$'\''\n" if /\[(\d+?)\]/;' -
    
    仅解释perl正则表达式引擎中的特殊变量:

    1美元-这是我想保留的匹配

    $`-赛前一切都准备好了


    $'-比赛后一切都会发生

    这里是另一个sed变体,使用保持空间移动物体。并不是说这是最好的方式,而是很有趣

    sed -e 'h;s/.*\[\([0-9]*\)\].*/\1/;x;s/\[.*\]/[]/;H;g;s/\n//'
    
    h命令将当前行复制到保留空间。然后我们分离出[和]之间的数字。x交换原始行的数字,因此保留空间仅包含数字。然后这次我们丢弃[]之间的所有内容,并将结果附加到保留空间中的数字。获取保留空间(g),删除嵌入的换行符,然后就可以了

    $ echo "some_text123_[12345]_some_text" | sed -e 'h;s/.*\[\([0-9]*\)\].*/\1/;x;s/\[.*\]/[]/;H;g;s/\n//'
    12345some_text123_[]_some_text
    

    我得到了sed:-e表达式1,char 33:s命令的rhsy上的无效引用\3你不应该是,除非你缺少一个
    (\”
    复制粘贴了你的示例
    echo“some_text[12345]\u some_text”\124; sed“s(.*)\[([0-9]+)\](.*)\u2\1[]3\u g”
    哦,用
    sed-e试试看,我有一个别名