繁体   English   中英

如何使用 sed 删除两个字符之间和第一次出现之前的字符串

[英]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 所做的是,每当其中匹配正则表达式时,它将为其名为RSTARTRLENGTH的 OOTB 变量设置值,因此基于此我们正在打印子字符串以忽略匹配的部分并根据需要打印其他所有内容 output有问题。



第二种解决方案:在 GNU awk中使用FPAT选项,尝试仅使用您显示的示例进行以下、编写和测试。

awk -v FPAT=':[^|]*' '{print $1,$2}'  Input_file

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM