我有很多行的形式
ko04062 ko:CXCR3
ko04062 ko:CX3CR1
ko04062 ko:CCL3
ko04062 ko:CCL5
ko04080 ko:GZMA
Run Code Online (Sandbox Code Playgroud)
并且非常希望摆脱右侧列的ko:位.我正在尝试使用sed,如下所示:
echo "ko05414 ko:ITGA4" | sed 's/\(^ko\d{5}\)\tko:\(.*$\)/\1\2/'
Run Code Online (Sandbox Code Playgroud)
它只是输出我回声的原始字符串.我是命令行脚本,sed,管道等新手,所以如果/当我做一些非常愚蠢的事情时,请不要太生气.
令我困惑的主要事情是,如果我将该\1\2位反转\2\1或仅使用一个组,则会发生同样的事情.我想,这意味着我遗漏了一些关于将echo输出管道输入到sed的机制,或者我的正则表达式错误或者我使用的是sed错误或者sed没有打印替换的结果.
任何帮助将不胜感激!
nin*_*alj 21
sed正在输出其输入,因为替换不匹配.由于你可能正在使用GNU sed,试试这个:
echo "ko05414 ko:ITGA4" | sed 's/\(^ko[0-9]\{5\}\)\tko:\(.*$\)/\1\2/'
Run Code Online (Sandbox Code Playgroud)
And*_*ers 10
这应该做到这一点.您也可以跳过最后一组,而只是使用,\1但是因为您正在学习sed和正则表达式这是好事.我想在中间使用一个非捕获组,(:? )但由于某种原因我无法使用sed,也许它不受支持.
sed --posix 's/\(^ko[0-9]\{5\}\)\( ko:\)\(.*$\)/\1 \3/g' file > result
Run Code Online (Sandbox Code Playgroud)
当然你可以使用
sed --posix 's/ko://'
Run Code Online (Sandbox Code Playgroud)
你不需要 sed
以下是使用bash执行此操作的方法:
var="ko05414 ko:ITGA4"
echo ${var//"ko:"}
Run Code Online (Sandbox Code Playgroud)
$ {var //"ko:"}将所有"ko:"替换为""
有关详细信息,请参阅操作字符串