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试试看,我有一个别名