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
$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