Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.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
String 找到图案并将其移动到行尾_String_Bash_Sed - Fatal编程技术网

String 找到图案并将其移动到行尾

String 找到图案并将其移动到行尾,string,bash,sed,String,Bash,Sed,我正在寻找一种解决方案,使我能够在字符/和s_之间找到一种模式,并将其移动到行尾 我假设以下字符串: "s_check_login_password= s_comm_type=TCPIP s_dest_address=10.55.28.125/22 s_org_address= s_net_proxy= s_ft_proxy=" 从这里,我想获得s_dest_address字段22的/后面的值,并将其移动到行的末尾 我试过这个: sed 's/\([^/\]*[^ s_]* s_\)\(.*;

我正在寻找一种解决方案,使我能够在字符
/
s_
之间找到一种模式,并将其移动到行尾

我假设以下字符串:

"s_check_login_password= s_comm_type=TCPIP s_dest_address=10.55.28.125/22 s_org_address= s_net_proxy= s_ft_proxy="
从这里,我想获得
s_dest_address
字段
22
/
后面的值,并将其移动到行的末尾

我试过这个:

sed 's/\([^/\]*[^ s_]* s_\)\(.*;\)/\2\1/'

但我想这不是个好办法。使用sed有什么方法可以做到吗?

因为您没有粘贴预期的输出,所以根据您的问题摘要,只有我写了这个

awk 'match($0,/\/[^ s]*/){print substr($0,1,RSTART),substr($0,RSTART+RLENGTH+1),substr($0,RSTART+1,RLENGTH-1)}' Input_file
现在也添加了一个非线性的解决方案

awk '
match($0,/\/[^ s]*/){
  print substr($0,1,RSTART),substr($0,RSTART+RLENGTH+1),substr($0,RSTART+1,RLENGTH-1)
}
'   Input_file
说明:

与塞德

sed -E 's#(.*/)([^ ]*)(.*)#\1\3\2#' infile
  • /
    更改为
    #
    作为sed表达式分隔符,因此无需转义它
  • ([^]*)
    您的预期匹配(22)
  • (.*)
    字符串的其余部分
  • \1\3\2
    更改捕获组的返回顺序

文件结束还是行结束?对于sed,我不知道,您必须使用GREP和AWK
$var=$(echo$string | grep“s|u dest_address”| awk-F/“{print$1}”
)->然后,
sed“s/$var/”
-->然后
sed“s/something”到达_文件的末端/$var/“
->但如上所述,文件?行结束,对不起!我刚刚编辑了这个问题。我尝试了你的解决方案,但它在
/
之后删掉了所有内容,甚至下一个字段也删掉了。谢谢你的时间,但它似乎仍然删掉了内容,反正有人给了我上面的解决方案。再次感谢。请你向我解释一下命令,我想了解一下,以免以后再问同样的问题吗?@f1rstsurf,当然现在在帖子中也添加了解释,如果有任何疑问,请告诉我,干杯。谢谢你的解释,awk有时有点难以理解:)我注意到,使用上面的命令,如果出现超过1次的
/
,然后出现
s
,那么它也会出现在上面。因此,我尝试将命令更改为类似以下内容的
awk'匹配($0,/address=[^\/]*/[^s]*/)
,但它返回以下输出
s\u dest\u a address='x.x.x/x
。您能帮我只捕获
s_dest_address
字段吗?@f1rstsurf,好的,也许我知道了,您能试试
awk'match($0,/s_dest_address=[^]*/){split(substr($0,RSTART,RLENGTH),array,“/”);打印substr($1,1,RSTART-1)array[1]substr($0,RSTART+RLENGTH+1),array[2]}输入文件
,并告诉我这是否有帮助?一旦确认,我也会将其添加到解决方案中。
sed -E 's#(.*/)([^ ]*)(.*)#\1\3\2#' infile