[英]How to remove string between two characters and before the first occurrence using sed
我想删除“:”和第一个“|”之间的字符串使用 sed。
输入: |abc:1.2.3|def|
output 来自 sed: |abc|def|
我设法想出了 sed 's|\(:\)[^|]*|\1|'
,但此 sed 命令不会删除第一个字符(“:”)。 如何修改此命令以同时删除冒号?
你不需要在你的模式中分组:
并使用它来代替。
你应该保持简单:
s='|abc:1.2.3|def|'
sed 's/:[^|]*//' <<< "$s"
|abc|def|
:
匹配冒号和[^|]*
匹配 0 个或多个非管道字符
第一种解决方案:使用awk
您可以尝试遵循awk
程序。
awk 'match($0,/:[^|]*/){print substr($0,1,RSTART-1) substr($0,RSTART+RLENGTH)}' Input_file
说明:使用match
function 的awk
,其中匹配从:
到直到第一次出现|
这里。 因此, match
function 所做的是,每当其中匹配正则表达式时,它将为其名为RSTART
和RLENGTH
的 OOTB 变量设置值,因此基于此我们正在打印子字符串以忽略匹配的部分并根据需要打印其他所有内容 output有问题。
第二种解决方案:在 GNU awk
中使用FPAT
选项,尝试仅使用您显示的示例进行以下、编写和测试。
awk -v FPAT=':[^|]*' '{print $1,$2}' Input_file
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.